So entschlüsseln Sie sha1-encrypted String in Java

8

Ist es möglich, eine Zeichenfolge zu entschlüsseln, die früher mit dem SHA-1-Algorithmus in Java verschlüsselt wurde?

    
Sergey 12.10.2011, 05:05
quelle

3 Antworten

12

SHA1 ist eine kryptografische Hash-Funktion , und der ganze Punkt ist, dass Sie sie nicht rückgängig machen können. Wenn es möglich wäre, den Hash umzukehren (finde die Eingabe für einen gegebenen Hash), wäre dies nicht nützlich. Wenn Sie etwas verschlüsseln und später entschlüsseln müssen, sollten Sie eine Verschlüsselungsfunktion wie AES oder RSA .

Für sehr einfache Eingaben kann es jedoch möglich sein, die Hash-Funktion zu knacken , indem Sie erraten, was die Eingabe war und prüfen wenn der Hash der gleiche ist.

Beispiel Python-Code:

%Vor%

Natürlich, wenn Sie Hashes effizient knacken wollen, verwenden Sie Software wie John the Ripper oder Hashcat ist wahrscheinlich die beste Wahl. Beachten Sie, dass dies in der Regel auf Passwörtern funktioniert, da sie kurz und einfach zu erraten sind, aber der Schwierigkeitsgrad exponentiell ansteigt, wenn die Eingabe zunimmt. Sie können jeden SHA-1 Hash mit einer 6-stelligen Eingabe in Minuten knacken, während das Cracken eines mit 16 Zeichen im Durchschnitt Billionen Jahre dauern würde.

    
Brendan Long 12.10.2011, 05:06
quelle
2

Nein, das ist nicht möglich, weil SHA-1 ein Hash ist - es ist ein One-Way-Ticket. Wenn Sie eine Zeichenfolge verschlüsseln und entschlüsseln möchten, müssen Sie einen Verschlüsselungsalgorithmus verwenden, der Schlüssel zum Generieren verschlüsselter Daten verwendet. Dann können Sie Daten verschlüsseln und sie erfolgreich entschlüsseln. Zum Beispiel AES. Sie können über AES von hier

lesen     
evilone 12.10.2011 05:12
quelle
2

Kurze Antwort: Es ist unmöglich.

Da SHA-1 eine kryptografische Hash-Funktion ist, ist es nach dem Prinzip der Schublade unmöglich, den Code umzukehren. Es gibt nur 2 160 mögliche SHA-1-Hashes. Da es eine unendliche Anzahl möglicher Eingabezeichenfolgen gibt, müssen Kollisionen vorhanden sein (mehrere Eingaben, die auf denselben Wert hashen). Im Allgemeinen gibt es keine Möglichkeit zu wissen, welche dieser Zeichenfolgen die ursprüngliche Eingabe war.

Allerdings sind echte Zeichenfolgen nicht vollständig willkürlich. Wenn Sie einige Informationen zu Ihrer Eingabezeichenfolge kennen (z. B. dass sie weniger als 5 Zeichen lang war), ist die Eingabe mit hoher Wahrscheinlichkeit eindeutig. Leider sind Hash-Funktionen wie SHA-1 absichtlich nicht umkehrbar. (Es gibt theoretische Angriffe auf SHA-1, aber ich glaube nicht, dass sie derzeit als annähernd machbar angesehen werden.)

Wenn Sie also Hash-Daten wiederherstellen müssen, müssen Sie Brute-Force verwenden: Versuchen Sie SHA-1ing für jede Zeichenfolge mit einer Länge von weniger als n und prüfen Sie, ob der Hashwert übereinstimmt. Aber es gibt exponentiell viele Strings der Länge bis zu n , so dass dies schnell unmöglich wird.

Es gibt eine Möglichkeit, Hash-Daten vor dem Ende des Universums wiederherzustellen . Ihre einzige Hoffnung ist es, eine ausgeklügeltere Methode zu verwenden, wie Regenbogen-Tabellen . Dies funktioniert nur, wenn Sie wissen, dass Ihre ursprüngliche Zeichenfolge sehr kurz war (weniger als 15 Zeichen). Selbst für kurze Strings wird es lange dauern (und Gigabytes an Speicherplatz), um die Tabelle vorzuberechnen.

    
Mechanical snail 12.10.2011 05:41
quelle