Wie zum entschlüsseln sha1-verschlüsselte String in Java
Ist es möglich, entschlüsselt einen string welcher zuvor verschlüsselt, mit SHA-1-Algorithmus in Java?
- SHA-1 ist ein hash, keine Verschlüsselung-Algorithmus. Wenn Sie versuchen, zu extrahieren eines string aus der SHA-1-hash, viel Glück. Das nennt man pre-image-Angriff.
- Es ist möglich, würde aber erfordern, computational Ressourcen und die Zeit, als die sha1-verschlüsselte Daten soll nicht entschlüsselt werden einmal verschlüsselt.
- Ich denke, die Frage sollte sein, wie rechenintensive es zu entschlüsseln sha1. Was hat Java damit zu tun? Wenn man einen guten Algorithmus, Sie können jede Sprache zu Programmieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
SHA1 ist ein kryptographische hash-Funktion, und der ganze Punkt ist, dass man es nicht rückgängig machen. Wenn es möglich war, zum umkehren der hash (suchen Sie nach der input für einen gegebenen hash), wäre es nicht nützlich sein. Wenn Sie brauchen, um etwas verschlüsseln und später wieder entschlüsseln, sollten Sie verwenden eine encryption-Funktion wie AES oder RSA.
Jedoch für sehr einfache Eingänge kann es möglich sein, knacken Sie den hash-Funktion auszudenken, was war der Eingang und der überprüfung, ob der hash ist gleich.
Beispiel Python code:
Natürlich, wenn Sie wirklich wollen, zu knacken hashes effizient, mit einer software wie John the Ripper oder Hashcat ist wahrscheinlich Ihre beste Wette. Beachten Sie, dass dies funktioniert in der Regel auf Passwörter, da Sie kurz und leicht zu erraten, aber die Schwierigkeit steigt exponentiell mit der Eingabe zunimmt. Können Sie knacken jedes SHA-1-hash mit einem 6-Zeichen-Eingabe, in Minuten, während Sie das knacken eines mit 16 Zeichen nehmen würde Billionen von Jahren im Durchschnitt.
Nein, dies ist nicht möglich, da SHA-1 ist ein hash - es ist ein one way ticket. Wenn Sie möchten, Krypta und entschlüsseln einer Zeichenkette dann benötigen Sie einige Verschlüsselungs-Algorithmus verwendet, Schlüssel zu erzeugen verschlüsselter Daten. Dann können Sie Daten verschlüsseln und nach dem erfolgreichen entschlüsseln. Zum Beispiel AES. Lesen Sie über die AES von hier
Kurze Antwort: es ist unmöglich.
Weil SHA-1 ist ein kryptographische hash-Funktion, durch die Schublade Prinzip, ist es mathematisch unmöglich, rückgängig zu machen. Es gibt nur 2160 möglich, SHA-1 hashes. Da gibt es eine unendliche Anzahl von möglichen input-strings, muss es Kollisionen (mehrere Eingänge, dass hash, um den gleichen Wert). Im Allgemeinen, es gibt keine Weise können Sie wissen, welche dieser Zeichenketten wurde die ursprüngliche Eingabe.
Jedoch Reale-Welt-Zeichenfolgen sind nicht völlig willkürlich. Wenn Sie wissen, einige Informationen über Ihre input-string (z.B., dass es weniger als 5 Zeichen lang), mit hoher Wahrscheinlichkeit, die Eingabe eindeutig ist. Leider für Sie, hash-Funktionen wie SHA-1 sind absichtlich rechnerisch unmöglich zu invertieren. (Es gibt theoretische Angriffe auf SHA-1, aber ich glaube nicht, dass alle, sind derzeit sogar in der Nähe möglich.)
Also, wenn Sie brauchen, sich zu erholen, gehashte Daten, die Sie haben zu verwenden brute-force: versuchen Sie, SHA-1ing jede Zeichenfolge mit einer Länge von weniger als n, und sehen, ob der hash übereinstimmt. Aber es gibt exponentiell viele strings der Länge bis zu n, also das wird schnell unmöglich.
Gibt es eine Möglichkeit, sich zu erholen, gehashte Daten vor dem Ende des Universums. Ihre einzige Hoffnung ist eine weiter entwickelte Methode, wie Regenbogen-Tabellen. Dies wird nur funktionieren, wenn Sie wissen, dass Ihre ursprüngliche string war sehr kurz (weniger als ~15 Zeichen). Auch für kurze strings, dauert es eine lange Zeit (und Gigabyte Speicherplatz), um pre-berechnen Sie die Tabelle.
Map<SHA1, byte[]> lookup = new HashMap<SHA1, byte[]>(); /*add some common inputs*/; return lookup.get(sha1sum);
. Es wird nur funktionieren, wenn Sie gerade Hinzugefügt haben, den input, den Sie suchen auf der Karte.