Reverse Hash mit MS Excel

Reverse Hash mit MS Excel

Ich habe mir auf YouTube ein Video mit dem Titel „Das A4 Papierpuzzle„Dabei nimmt der Moderator ein Blatt A4-Papier, faltet es auf eine bestimmte Art und Weise und fordert die Zuschauer dann auf, den Umfang zu berechnen. Er gibt dabei jedoch keine Lösung an, sondern zeigt stattdessen eine Methode, mit der sich mithilfe eines Hashs überprüfen lässt, ob man die richtige Antwort hat.

So ermitteln Sie die richtige Antwort: Nehmen Sie Ihre Antwort und klicken Sie auf einem Taschenrechner fünfmal auf „sq rt“. Nehmen Sie dann aus dem Ergebnis die sechs Ziffern rechts vom Dezimalpunkt und ordnen Sie sie in aufsteigender numerischer Reihenfolge neu an. Wenn diese 234477 ergeben, haben Sie die richtige Antwort.

Anstatt also zu versuchen, den Umfang zu berechnen, wollte ich den Hash umkehren, um zur Lösung zu gelangen. Also startete ich Excel und gab in A5 die Kandidatennummer ein (sagen wir 42) und begann dann in B5 bis F5 mit der Quadratwurzelbildung. In G5 subtrahierte ich 1, um 0,123897073 zu erhalten, was ich in H5 mit 1 Million multiplizierte, um 123897 zu erhalten, und extrahierte dann in I5:I10 jede der Zahlen. In J5:J10 sortierte ich die Zahlen mithilfe einer Formel, also J5-1, J6=2, J7=3, J8=7, J9=8, J10=9, und schließlich verknüpfte ich in K5 alle Zahlen, um 123789 zu erhalten, und platzierte das Ziel 234477 in L5.

Und jetzt stecke ich fest. Ich nahm an, ich könnte mit der Zielwertsuche K5 durch Ändern von A5 auf 234477 setzen, aber es wird keine Lösung gefunden.

Ich möchte zum Finden der Antwort keinen Code/Makro und auch keine manuellen Vorgänge wie Sortieren usw. verwenden. Mir gefiel die Idee, zuzusehen, wie die Zielsuche Lösungen durchläuft und ausprobiert, und den Pfad zur Lösung „sehen“ zu können.

Weiß jemand, wie ich das schaffen kann?

Formeln
A5 = Vom Benutzer eingegebene Zahl
B5 = SQRT(A5)
C5 = SQRT(B5)
D5 = SQRT(C5)
E5 = SQRT(D5)
F5 = SQRT(E5)
G5 = F5-1
H5 = WENN(MID(G5,3,1)*1=0,G5*10000000,G5*1000000)
(LISTE)I5:I10 = MID($F$5,3,1)*1 [3 pro Zeile um 1 erhöhen)
J5:J10 { = INDEX(Liste, VERGLEICH(KLEIN(ZÄHLENWENN(Liste, "<"&Liste), ZEILE(1:1)), ZÄHLENWENN(Liste, "<"&Liste), 0))}
K5 = J5&J6&J7&J8&J9&J10

Bildbeschreibung hier eingeben

BEARBEITEN: Vielleicht sollte ich die Zielwertsuche nicht verwenden, da sie möglicherweise Einschränkungen aufweist. Selbst wenn ich das Ziel 123789 eingebe, kann der Startwert 42 immer noch nicht gefunden werden.

Antwort1

Generell sollten Sie versuchen, einen Algorithmus zu finden, der nicht nur für Ihre Lösung gültig ist.
Versuchen Sie sogar, die Berechnung so schnell wie möglich zu machen.

Falsche Lösung

  • A5Ihr Anfangswert bleibt erhalten
  • B5 =A5^(1/32), ja, ein bisschen Mathematik
    (SQRT(x) ist gleichbedeutend mit x^1/2; fünfmal machen bedeutet 1/2*1/2*.... = 1/32)
  • C5 =Mod(B5,1)
    Hier können Sie nicht einfach sagen 1-x: Stellen Sie sich vor, es wären 2.etw. oder 0.etw. …

    Die MOD-Funktion gibt den Rest zurück, nachdem eine Zahl durch einen Divisor geteilt wurde.

  • D5 =3-TRUNC(LOG(C5,10))
    Sie müssen die ersten Ziffern ungleich Null nehmen (Funktion Log 10 ) und den 0.Rest der Zeichenfolge überspringen.
  • E5 =MID(C5,D5,6)Hier extrahieren Sie die Zeichenfolge.
  • F5:F10Einfache Indizes für die nächsten Spaltenfunktionen.
  • G5 =0+MID($E$5,F5,1) Es extrahiert die Ziffer mit F5. Kopieren und Einfügen in G5:G10.
  • H5 =LARGE($G$5:$G$10,7-F5) Nehmen Sie den 7-F5-größten aus dem Bereich G5:G10. Kopieren und einfügen in H5:H10.
  • I5 =H5&H6&H7&H8&H9&H10Den String erneut zusammensetzen
  • J5Es wird die zu findende HASH-Lösung beibehalten (Sie haben sie aufgerufen)Ziel)
  • K5 =I5=MID(J5,1,6)Vergleichen Sie die Zeichenfolge in I5undaus J5.

Hier unten die Lösung:

Bildbeschreibung hier eingeben

Hier ein Bash-Code für SHA256

Hier ein Bash-Code für SHA256
StartSeq=1 ; EndSeq=5

for i in $(seq $StartSeq $EndSeq) ;
 do 
   [[ $(printf "$i" | sha256sum | awk '{print $1}'| xxd -r -p | base64) \
   == "SyJ3d9TdH8Ycb4hPSGQdArTRIdP9Moywi1Ux/Kzav4o=" ]] && \
   echo "### The Solution is "$i ; 
done

Antwort2

Danke an HasturIch habe einen Weg gefunden, wie Zielwertsuche funktioniert. Bisher hat es für mich zwei Lösungen gefunden -

4 und 2340.

Also gut, los geht's, basierend aufHasturs Antwort

Wir beginnen wieder inA5

  • A5= beliebige Zahl
  • B5 =INT(A5)
  • C5 =B5^(1/32)
  • T5 - Der große Wurf =INT(MID(C5,FIND(".",C5,1)+1,10))
  • E5 =INT(IFERROR(IF(FIND("0",D5,1)<6,CONCATENATE(LEFT(D5,FIND("0",D5,1)-1),MID(D5,FIND("0",D5,1)+1,10-FIND("0",D5,1)))),LEFT(D5,6)))
  • F5 =INT(IFERROR(IF(FIND("0",E5,1)<=6,CONCATENATE(LEFT(E5,FIND("0",E5,1)-1),MID(E5,FIND("0",E5,1)+1,7-FIND("0",E5,1))),LEFT(E5,6)),LEFT(E5,6)))
  • G5 bis G10sind Index 1,2,3,4,5,6 - sie ändern sich nie
  • H5 bis H10 =INT(0+MID($F$5,$G5,1))nach unten gezogen, sodass $G5es auf 6, 7 usw. ansteigt.
  • I5 bis I10 =SMALL($H$5:$H$10,ROW(A1))nach unten gezogen, so dass Row(A1)erhöht
  • J5 =INT(CONCATENATE(I5,I6,I7,I8,I9,I10))

Jetzt können Sie Ziel suchen aufJ5Zu234477durch AustauschA5

Bildbeschreibung hier eingeben


Lösung

Bildbeschreibung hier eingeben

verwandte Informationen