7 Stimmen

Gibt es eine md5-Entschlüsselungsfunktion in Python?

Mögliches Duplikat:
Ist es möglich, md5-Hashes zu entschlüsseln?

i verwendet md5.new() ; md5.update("aaa") , md5.digest()

um einen md5-Hash der Daten zu bilden "aaa" . Wie erhält man die Daten mit Python zurück?

13 Stimmen

Nein, weder in Python noch in einer anderen Programmiersprache

7 Stimmen

Md5() ist keine "Verschlüsselungs"-Funktion. Es gibt keine Umkehrung, und wenn es eine gäbe, könnte sie nicht für Passwörter verwendet werden.

9 Stimmen

Daten -> hash = steak -> hamburger

22voto

Sean Vieira Punkte 147654

Sie können einen md5-Hash nicht dekodieren, da Hashing ein Prozess ist, den man sich am besten als Einweg-Kodierung (d. h., was gehasht wurde, kann nicht de-hasht werden; man kann nur feststellen, was gehasht wurde, entweder durch Prüfung einer Liste bekannter Hashes oder durch Hashing einer Reihe von Eingaben und Abgleich der resultierenden Hashes mit dem Hash, den man zu "entschlüsseln" versucht).

Laut Wikipedia sind die wichtigsten Merkmale eines solchen Hash-Algorithmus folgende:

ist es undurchführbar, eine Nachricht zu finden zu finden, die einen bestimmten Hashwert hat,

es ist es nicht möglich ist, eine Nachricht zu ändern, ohne ihren Hash zu ändern,

ist es undurchführbar zwei verschiedene Nachrichten mit demselben gleichen Hash zu finden.

Solche Algorithmen werden heute am häufigsten verwendet:

  • Speichern von Passwörtern
  • Überprüfen des Inhalts von Dateien.

Wenn Sie die Daten in beide Richtungen verschlüsseln wollen, müssen Sie sich andere kryptografische Bibliotheken für Python ansehen (Wie üblich hat Stackoverflow eine Empfehlung ).

0 Stimmen

Wenn es nicht "dekodiert" werden soll, dann ist "kodieren" eine eher schlechte Wortwahl. Warum nicht der traditionelle "Einweg-Hash"?

0 Stimmen

@: Weil Einwegverschlüsselung ein falscher Begriff ist, der nur von denen verwendet wird, die nicht genau wissen, wovon sie reden.

0 Stimmen

Passwort-Hashes werden jeden Tag geknackt.

14voto

Das können Sie nicht. Das ist der Punkt - ein Hash ist einseitig, er ist nicht dasselbe wie eine Verschlüsselung.

2 Stimmen

Ein Hash ist nicht notwendigerweise einseitig, aber MD5 ist es auf jeden Fall ;) Ein Hash ist nur dann einseitig, wenn es zu Kollisionen kommt, so dass zwei verschiedene Eingaben das gleiche Ergebnis haben.

2 Stimmen

@Nathan: Das macht überhaupt keinen Sinn.

0 Stimmen

Könnten Sie das näher erläutern? warum es keinen Sinn macht? Wenn man es aus einer mathematischen Perspektive betrachtet, ist ein Hash lediglich eine Funktion h(x)=y donde h ist die Hash-Funktion, x ist die Eingabe, und y ist die Ausgabe. Ein Hash ist nur einseitig, wenn es einen solchen gibt x y z que h(x)=y et h(z)=y angesichts der Tatsache, dass x != z . Angenommen, h(x) ist nur eine Kennung (z. B. x ein Integer- oder Char-Typ ist), oder auch nur eine einfache Drehung. Dies wäre vollständig umkehrbar und somit nicht einseitig.

3voto

Jasper Punkte 10923

Ich weiß nicht, wie es bei Python ist, aber Hash-Funktionen sind unumkehrbar. Zunächst einmal ist zu beachten, dass Hash-Funktionen eine Ausgabe mit konstanter Länge liefern - was bedeutet, dass Informationen weggeworfen werden (Sie können eine Datei von 3 MB hashen und erhalten trotzdem nur ein Ergebnis von weniger als 1 kB). Darüber hinaus sind Hash-Funktionen dafür gemacht, dass sie nicht umkehrbar sind. Wenn Sie eine Verschlüsselung benötigen, verwenden Sie nicht Hashing, sondern Verschlüsselung - eine wichtige Anwendung von Hashing ist, wenn die Datenbankinformationen durchgesickert sind (die Hashes enthielten), dass die Passwörter nicht kompromittiert wurden (es gibt noch mehr Beispiele, aber dies ist das offensichtlichste)

0 Stimmen

Dies gilt nur für kryptografische Hash-Funktionen. Eine rein mathematische Hash-Funktion hat keine eigene Größe hash(n) = n % 101, auch wenn es bei den meisten Implementierungen eine Typgröße geben wird. Dies ist eine gängige Methode, um Werte auf Array-Indizes abzubilden. Obwohl sie irreversibel ist (es sei denn, man weiß, dass n <101 ist), ist es ziemlich einfach, mögliche Eingaben vorherzusagen.

3voto

rook Punkte 64487

Wenn Sie einen Hash brechen wollen, z. B. einen Passwort-Hash. Dann brauchen Sie eine sehr große Nachschlagetabelle. John the Ripper wird häufig verwendet, um Passwörter mit Hilfe eines Wörterbuchs zu knacken. Dies ist eine sehr gute Methode, vor allem, wenn es sich um einen gesalzenen Passwort-Hash handelt.

Ein anderer Ansatz ist die Verwendung eines Regenbogen-Tisch Diese benötigen jedoch viel Zeit zur Erstellung. Es gibt kostenlos online zugängliche Regenbogentische .

Hier ist ein Python-Skript zur Durchführung eines md5()-Brute-Force-Angriffs.

1voto

D.Shawley Punkte 56313

Um das Argument der anderen zu ergänzen: MD5 ist ein einseitiger Hash. Üblicherweise werden zwei Eingabewerte gehasht, und wenn die gehashten Werte übereinstimmen, dann wird die Eingabe sollte gleich sein. Es ist unsinnig, von einem mit MD5 gehashten Wert zur Hash-Eingabe zu wechseln. Was Sie wahrscheinlich wollen, ist ein symmetrischer Verschlüsselungsalgorithmus - siehe Zwei-Wege-Schlüssel-Verschlüsselung/Hash-Algorithmus für eine gute Diskussion zu diesem Thema.

0 Stimmen

"md5 ist ein Einweg-Hash" Dieser Satz ist nicht falsch, aber er impliziert fälschlicherweise, dass es Zweiweg-Hashes gibt...

0 Stimmen

@Jasper - MD5 ist eine Einweg-Hash-Funktion, was sie zu einem Kandidaten für eine kryptographisch Hash-Funktion, und Sie haben Recht, dass die Zwei-Wege kryptographisch Hash-Funktionen sind völliger Unsinn. Ich hätte wohl sagen sollen: "MD5 ist eine kryptografische Hash-Funktion und daher von Natur aus unumkehrbar".

1 Stimmen

@Jasper: Ich sehe deinen Pendantry-Call und erhöhe dich: Perfekte Hashes. Alle zulässigen Eingaben führen zu einer eindeutigen Ausgabe und können daher umgekehrt werden, so dass es sich um eine Zwei-Wege-Hash-Funktion handelt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X