MD5 in SHA-256 umwandeln? Warum das unmöglich ist – und was hilft
Zahlreiche Seiten versprechen genau das, und manche davon sehen aus wie funktionierende Werkzeuge. Die beworbene Operation existiert nicht. Warum sie nicht existiert, entscheidet darüber, was Sie stattdessen tun.
Die kurze Antwort: MD5 lässt sich nicht in SHA-256 umwandeln (und SHA-256 nicht in MD5)
Sie können einen MD5-Hash nicht in SHA-256 umwandeln. Ein MD5-Digest ist 128 Bit lang, und die Eingabe, aus der er entstanden ist, steckt nicht darin. SHA-256 braucht genau diese Eingabe, um überhaupt etwas berechnen zu können. Ohne die Originaldaten fehlt der Zwischenschritt dauerhaft, und kein Werkzeug und keine Bibliothek füllt ihn auf.
Hier dieselbe Eingabe unter drei Algorithmen:
| Algorithmus | Digest von hello | Hex-Zeichen | Bit |
|---|---|---|---|
| MD5 | 5d41402abc4b2a76b9719d911017c592 | 32 | 128 |
| SHA-1 | aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d | 40 | 160 |
| SHA-256 | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 | 64 | 256 |
Betrachten Sie die drei Digests als Zeichenketten. Sie teilen kein Präfix und keine Teilzeichenkette, und rechnerisch lässt sich keiner aus einem anderen ableiten. Das Einzige, was sie verbindet, ist das Wort hello – und keiner von ihnen trägt es in sich. Berechnen Sie sie selbst mit dem MD5-Hash-Generator und dem SHA-256-Generator, wenn Sie zusehen möchten, wie sich beide beim Tippen unabhängig voneinander verändern.
Die Richtung ändert daran nichts. Der Weg von SHA-256 zu MD5 scheitert aus genau demselben Grund: Beide Funktionen vernichten Information absichtlich, also lässt sich kein Digest zu der Eingabe zurückrechnen, die die jeweils andere Funktion bräuchte.
Bleibt die nützliche Frage. Niemand tippt diese Suchanfrage aus reinem Interesse an Hash-Theorie ein. Was wollten Sie also wirklich erreichen? In der Praxis ist es eine von vier Aufgaben, und jede hat eine echte Antwort:
- Einen Download verifizieren oder Prüfsummen vergleichen
- Eine Passwortdatenbank von MD5 wegmigrieren
- Die ursprüngliche Eingabe hinter einem Hash zurückgewinnen
- Dieselben Daten mit einem anderen Algorithmus hashen
Jede davon behandeln wir weiter unten. Zuerst aber die Seiten, die diese Umwandlung versprechen: Wer ihr Muster einmal erkennt, vertraut ihrer Ausgabe erst gar nicht.
Was eine „MD5-zu-SHA-256-Konverter“-Seite wirklich tut
Es gibt nur drei Möglichkeiten, und keine davon ist eine Umwandlung.
Manche fragen nach dem Originaltext. Sie fügen eine Zeichenkette ein, die Seite erzeugt beide Digests, und der Werbetext nennt das eine Umwandlung. Das ist ein Hash-Generator mit irreführender Beschriftung: Die Seite wandelt nichts um, sie hasht Ihre Eingabe zweimal.
Andere schlagen den Digest nach. So eine Seite pflegt eine Tabelle aus Paaren von Eingabe und Digest, zusammengetragen aus Wortlisten und geleakten Zugangsdatensammlungen. Fügen Sie einen MD5 ein, dessen Eingabe in dieser Tabelle steht, findet die Seite die Eingabe, hasht sie mit SHA-256 und zeigt Ihnen das Ergebnis. Das funktioniert bei password, 123456 und einer langen Reihe weiterer kurzer Zeichenketten. Bei allem anderen scheitert es stillschweigend, weshalb solche Seiten oft ein leeres Ergebnis ohne jede Erklärung liefern.
Und erstaunlich viele tun gar nichts. Sie geben schlicht Ihre Eingabe erneut aus oder liefern einen SHA-256 der eingefügten Hex-Zeichenkette und suggerieren, es sei der SHA-256 Ihrer Originaldaten. Diese beiden Werte sind verschieden, und der Abschnitt zum doppelten Hashen weiter unten zeigt, wie verschieden.
Der Test geht schnell. Geben Sie der Seite eine 32 Zeichen lange Hex-Zeichenkette und sonst nichts, und fragen Sie sich, woher sie die Eingabe überhaupt kennen sollte. Wenn sie trotzdem ein 64 Zeichen langes Ergebnis liefert und das eine Umwandlung nennt, fragt sie entweder eine Nachschlagetabelle ab oder sie lügt. Ein Hash-Konverter, der nie nach Ihren Originaldaten fragt, kann nur durch Zufall richtigliegen.
Die Formulierung hält sich, weil sie nach etwas Benachbartem klingt, das tatsächlich funktioniert. Darunter liegt eine Verwechslung.
Hashing, Kodierung und Verschlüsselung: nur zwei der drei sind umkehrbar
Entwickler begegnen allen dreien in derselben Woche und legen sie in dieselbe gedankliche Schublade. Ihr Verhalten ist völlig unterschiedlich:
| Operation | Beispiel | Umkehrbar? | Was Sie brauchen |
|---|---|---|---|
| Kodierung | Base64, Hex, URL-Kodierung | Ja, immer | Gar nichts |
| Verschlüsselung | AES, RSA | Ja | Den Schlüssel |
| Hashing | MD5, SHA-1, SHA-256 | Niemals | Nichts hilft |
Base64 ist der Fall, der die falsche Intuition antrainiert. Jeder kann eine Base64-Zeichenkette dekodieren und die ursprünglichen Bytes zurückerhalten, ohne Schlüssel und ohne Berechtigung, und Base64 in Hex umzuwandeln ist eine legitime, alltägliche Operation. Beides sind nur alternative Schreibweisen derselben Bytes. Wer das einmal gesehen hat, hört bei „MD5 zu SHA-256“ dieselbe Art von Umschreibung heraus.
Ist es aber nicht. Kodierung bewahrt jedes Bit der Eingabe, Verschlüsselung bewahrt es hinter einem Schlüssel, und Hashing wirft fast alles davon weg. Ein MD5-Digest ist 16 Byte groß, ganz gleich, ob Sie ihm ein Passwort oder ein 40 GB großes Festplatten-Image gefüttert haben. Die 40 GB sind nicht an einen cleveren Ort gewandert; sie sind weg. Die FAQ des MD5-Tools behandelt den Vergleich mit Verschlüsselung ausführlicher, falls Sie ihn brauchen, aber die Kurzfassung reicht hier: Es gibt keinen Schlüssel, also gibt es nichts zu entschlüsseln.
„MD5 ist gebrochen“ heißt nicht „MD5 ist umkehrbar“
Hier irren sich sogar redliche Artikel. Leser springen von „MD5 wurde vor Jahren gebrochen“ direkt zu „dann kann es inzwischen doch sicher jemand rückgängig machen“.
Im Spiel sind zwei verschiedene Angriffe:
- Ein Kollisionsangriff findet zwei verschiedene Eingaben, die denselben Digest erzeugen. Der Angreifer wählt beide Eingaben, und es ist ihm gleich, welche es sind.
- Ein Urbildangriff (preimage attack) geht von einem Digest aus und rekonstruiert eine Eingabe, die ihn erzeugt. Genau dieser Angriff würde die Umwandlung von MD5 in SHA-256 ermöglichen, denn er gäbe Ihnen etwas zurück, das Sie in SHA-256 einspeisen können.
Die Kollisionsresistenz von MD5 fiel 2004, und heute lässt sich eine Kollision auf gewöhnlicher Hardware in Sekunden konstruieren. Deshalb taugt MD5 nicht für Signaturen, Zertifikate und alles, worauf ein Angreifer Einfluss nehmen kann.
Die Urbildresistenz von MD5 ist nicht gefallen. Der beste bekannte Urbildangriff bleibt theoretisch, mit einer Komplexität von 2^123.4 (Sasaki und Aoki, 2009). Das ist um Haaresbreite schneller als vollständiges Durchprobieren und in jeder relevanten Größenordnung unerreichbar. Niemand invertiert beliebige MD5-Digests, weder 2004 noch heute.
Beide Aussagen gelten gleichzeitig: MD5 ist gebrochen, und MD5 ist weiterhin nicht umkehrbar. Wenn Sie für ein neues System zwischen den beiden Algorithmen wählen, statt zwischen ihnen umwandeln zu wollen, behandelt der Vergleich MD5 vs. SHA-256 diese Entscheidung im Detail.
Was Sie eigentlich wollen: vier Aufgaben und die jeweils richtige Antwort
| Was Sie wirklich vorhaben | Die tatsächliche Antwort |
|---|---|
| Einen Download verifizieren oder Prüfsummen vergleichen | Aus der Datei neu berechnen, mit dem Algorithmus, den Sie brauchen |
| MD5-Passwort-Hashes migrieren | In bcrypt einwickeln und beim Login aufrüsten |
| Die ursprüngliche Eingabe zurückgewinnen | Das ist Knacken, nicht Umwandeln, und es hängt an der Entropie |
| Dieselben Daten mit einem anderen Algorithmus neu hashen | Zurück zu den Quell-Bytes |
Aufgabe 1: Sie vergleichen Prüfsummen oder verifizieren einen Download
Berechnen Sie den Hash neu, statt ihn umzuwandeln. Die Datei liegt auf Ihrer Festplatte, damit haben Sie genau das, was der Digest verloren hat. Lassen Sie den benötigten Algorithmus darauf laufen:
# GNU coreutils
md5sum ubuntu-24.04-desktop-amd64.iso
sha256sum ubuntu-24.04-desktop-amd64.iso
# macOS
md5 ubuntu-24.04-desktop-amd64.iso
shasum -a 256 ubuntu-24.04-desktop-amd64.iso
Der Konflikt sieht meist so aus: Ein Anbieter listet nur eine MD5-Prüfsumme, während Ihre Sicherheitsrichtlinie SHA-256 verlangt. Die veröffentlichte MD5 umzuwandeln würde selbst dann nichts beweisen, wenn es ginge, denn ein Digest, den Sie aus einem anderen Digest abgeleitet haben, ist keine Aussage des Anbieters über die Datei. Was Sie brauchen, ist ein SHA-256, den der Anbieter signiert hat. Bietet er keinen an, liefert Ihnen ein selbst berechneter SHA-256 mit dem SHA-256-Generator trotzdem einen stabilen Fingerabdruck für den internen Gebrauch: Sie können ihn festschreiben, ihn über verschiedene Spiegelserver hinweg vergleichen und spätere Änderungen erkennen. Er kann nur die Bestätigung des Anbieters nicht ersetzen.
Aufgabe 2: Sie migrieren eine Passwortdatenbank weg von MD5
Bei Passwörtern steht am meisten auf dem Spiel, und die Lösung ist eingespielt: die alten Hashes einwickeln und dann jedes Konto beim Login transparent aufrüsten. Sie jagen jeden gespeicherten MD5-Hash in einem einzigen Batch-Lauf durch bcrypt, und ab da hasht der Login-Pfad das eingereichte Passwort zuerst mit MD5 und vergleicht das Ergebnis mit dem bcrypt-Datensatz.
Vorher eine Warnung, denn viele ältere Ratschläge drehen genau das um. MD5 in SHA-256 einzuwickeln macht die Passwortspeicherung nicht sicher. SHA-256 ist ein schneller Hash, dieselbe Problemklasse wie MD5, und GPUs mahlen beide in enormem Tempo durch. Wer Ihnen die eingebaute SHA2()-Funktion einer Datenbank als Lösung empfiehlt, löst das falsche Problem. Das Ziel ist ein absichtlich langsamer Hash: bcrypt, scrypt oder Argon2. Speichern Sie bcrypt(md5(password)), niemals sha256(md5(password)). Der Vergleich bcrypt vs. Argon2 vs. scrypt zeigt, wie Sie unter den dreien wählen, und mit dem bcrypt-Generator testen Sie Kostenfaktoren, bevor Sie sich festlegen.
„Der MD5 des Passworts“ ist mehrdeutig, und genau daran scheitern Migrationen. Die beiden Lesarten liefern verschiedene Ergebnisse:
const { createHash } = require('node:crypto');
const md5Hex = createHash('md5').update('hello').digest('hex');
const md5Raw = createHash('md5').update('hello').digest(); // the same value as 16 bytes
createHash('sha256').update(md5Hex).digest('hex');
// 4914e23374bb211e3dca0df7636fefffc7fedd94f1340ae81c7d6c07b7113e9b
createHash('sha256').update(md5Raw).digest('hex');
// 88e20f0abb88153e3f0a9683668ccb5b84ed771817dc448a2b73254ed02c8d8c
createHash('sha256').update('hello').digest('hex');
// 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Drei Ergebnisse, alle korrekt, alle verschieden. Hashen Sie die 32 Zeichen lange Hex-Zeichenkette, erhalten Sie den einen Wert; hashen Sie die 16 rohen Bytes, für die sie steht, einen anderen; hashen Sie das ursprüngliche Passwort, einen dritten. Legen Sie eine Konvention fest, schreiben Sie sie auf und verwenden Sie dieselbe im Migrationsskript und im Login-Pfad. Ein Fehler an dieser Stelle sperrt alle Nutzer auf einen Schlag aus, und das Symptom sieht nach einem bcrypt-Bug aus statt nach einer Kodierungsentscheidung.
Für einen bcrypt-Wrapper ist Hex die sicherere Konvention. Rohe Digest-Bytes können ein Nullbyte enthalten, und mehrere bcrypt-Implementierungen behandeln ihre Eingabe als C-Zeichenkette und hören dort auf zu lesen. Hex umgeht das vollständig und bleibt mit 32 Zeichen deutlich unter der Längenbegrenzung von bcrypt. Normalisieren Sie außerdem die Groß- und Kleinschreibung, denn 5D41402A... und 5d41402a... sind für bcrypt verschiedene Zeichenketten, obwohl sie denselben Digest bezeichnen.
const bcrypt = require('bcrypt');
const { createHash } = require('node:crypto');
const legacyDigest = (password) =>
createHash('md5').update(password, 'utf8').digest('hex'); // lowercase hex
// Batch job, run once: wrap each stored MD5, then drop the old column.
async function wrapRow(row) {
return bcrypt.hash(row.md5_hash.toLowerCase(), 12);
}
// Login path
async function verify(password, row) {
if (row.scheme === 'bcrypt') {
return bcrypt.compare(password, row.hash);
}
const ok = await bcrypt.compare(legacyDigest(password), row.hash);
if (ok) {
const upgraded = await bcrypt.hash(password, 12);
await saveCredential(row.id, { scheme: 'bcrypt', hash: upgraded }); // your DB write
}
return ok;
}
Konten wandern zu reinem bcrypt, sobald ihre Besitzer sich anmelden. Setzen Sie für die Nachzügler eine Frist und erzwingen Sie danach ein Zurücksetzen.
Aufgabe 3: Sie wollen die ursprüngliche Eingabe zurückgewinnen
Nennen Sie die Sache beim Namen, zumindest sich selbst gegenüber, denn davon hängen Werkzeuge und Erwartungen ab. Eine Eingabe aus einem Digest zurückzugewinnen ist Knacken, nicht Umwandeln, und ob es gelingt, hat nichts damit zu tun, welcher Algorithmus den Digest erzeugt hat. Es hängt an der Eingabe.
Kurze, von Menschen gewählte Zeichenketten fallen schnell. Wörterbuchwörter, Namen mit einer angehängten Ziffer und alles, was schon einmal in einem Leak-Korpus aufgetaucht ist, fällt einer Nachschlagetabelle oder einem kurzen Brute-Force-Lauf zum Opfer. Lange Zufallszeichenketten fallen überhaupt nicht, und der Abstand zwischen beiden Fällen ist keine Frage von mehr Hardware.
Über Regenbogentabellen kursiert meist eine ungenaue Aussage. Eine Regenbogentabelle gewinnt eine Eingabe nur dann zurück, wenn diese Eingabe ohne Salt gehasht wurde und bereits in der Tabelle steht. Beide Bedingungen müssen erfüllt sein. Ergänzen Sie ein Salt pro Nutzer, und die vorberechnete Tabelle ist wertlos, denn der Angreifer bräuchte je Salt eine eigene Tabelle. Füttern Sie den Hash mit einem 128 Bit langen Zufallstoken, und keine Tabelle der Welt enthält es. Der Leitfaden zur Passwort-Entropie beziffert, wo diese Grenze verläuft.
War die Eingabe ein Passwort, das Ihnen gehört, und Sie bekommen es nicht mehr zusammen, behandeln Sie das als Zurücksetzen, nicht als Wiederherstellung. Gehört es jemand anderem, ist die ehrliche Bezeichnung die oben genannte.
Aufgabe 4: Sie brauchen dieselben Daten mit einem anderen Algorithmus gehasht („md5 to sha1 converter“)
Das ist dieselbe Form wie Aufgabe 1, nur verallgemeinert. Welches Algorithmenpaar in der Anfrage steht, spielt keine Rolle, denn die Antwort lautet immer: zurück zu den Quell-Bytes und erneut hashen.
sha1sum payload.bin
sha256sum payload.bin
Jeder „md5 to sha1 converter“, den Sie finden, ist ein Neu-Hasher oder eine Nachschlagetabelle, aus denselben Gründen wie oben. Sind die Originaldaten nicht verfügbar, hat die Aufgabe keine Lösung, und das liegt nicht an den verfügbaren Werkzeugen. Wählen Sie den Zielalgorithmus mit dem Vergleich der SHA-Familie; der SHA-1-Generator steht für Altsysteme bereit, die ihn noch verlangen, auch wenn nichts Neues das mehr tun sollte.
Der eine Fall, in dem das Nachschlagen eines Hash-Konverters tatsächlich funktioniert
Bei manchen Datenklassen sammelt ein Dienst die Objekte zentral und indiziert sie nach jedem gängigen Digest. Malware-Samples sind das Standardbeispiel. Dienste wie VirusTotal speichern das Sample selbst, haben also dessen MD5, SHA-1 und SHA-256 aus denselben Bytes berechnet und alle drei unter einem Datensatz abgelegt. Suchen Sie dort nach der MD5 eines Samples, bekommen Sie dessen SHA-256 zurück.
Das ist ein Datenbank-Join, keine Umwandlung. Es funktioniert, weil jemand die Originaldatei hatte und sie mit jedem Algorithmus gehasht hat: genau der oben beschriebene Schritt des Neuberechnens, nur vorab von einem Dritten erledigt. Die Bedingungen sind streng: Das Objekt muss bereits im Index stehen, und Sie müssen demjenigen vertrauen, der ihn aufgebaut hat. Threat-Intelligence-Workflows leben täglich davon. Über beliebige MD5-Digests sagt das nichts aus, und bei einem Hash Ihrer eigenen Daten wird es Ihnen nie helfen.
Der Mechanismus ist derselbe, den auch die zwielichtigen Konverter-Seiten nutzen. Der Unterschied: Ein Malware-Repository sagt Ihnen, dass es nachschlägt, und zeigt Ihnen den Datensatz.
Probieren Sie es selbst aus
Am schnellsten verinnerlichen Sie das, indem Sie zusehen, wie sich zwei Digests derselben Eingabe gemeinsam ändern und dabei ohne Bezug zueinander bleiben:
$ printf 'hello' | md5sum
5d41402abc4b2a76b9719d911017c592 -
$ printf 'hello' | sha256sum
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 -
Ändern Sie ein einziges Zeichen, und beide Ausgaben ändern sich vollständig, ohne jeden erkennbaren Zusammenhang. Fügen Sie denselben Text nebeneinander in den MD5-Hash-Generator und den SHA-256-Generator ein, um es live zu sehen, oder greifen Sie zum HMAC-Generator, wenn Sie in Wahrheit einen geschlüsselten Digest zum Signieren einer API-Anfrage brauchen. Alle drei laufen vollständig in Ihrem Browser.
FAQ
Kann man MD5 in SHA-256 umwandeln?
Nein. Ein MD5-Digest enthält die ursprüngliche Eingabe nicht, und SHA-256 braucht genau diese Eingabe, um überhaupt etwas zu erzeugen. Jede Seite, die eine Umwandlung behauptet, hasht entweder von Ihnen gelieferten Text neu oder schlägt den Wert in einer Datenbank vorberechneter Paare nach.
Warum bieten so viele Seiten einen „MD5-zu-SHA-256-Konverter“ an?
Weil sie für eine Suchanfrage ranken, die Leute tatsächlich eintippen. Sind Sie erst dort gelandet, fragt die Seite entweder nach Ihrem Originaltext (dann ist es erneutes Hashen und keine Umwandlung) oder sie liefert nichts Brauchbares. Die Formulierung hält sich, weil das Missverständnis dahinter verbreitet ist.
Lässt sich SHA-256 zurück in MD5 umwandeln?
Nein, und die Richtung spielt keine Rolle. Beide sind Einwegfunktionen, also lässt sich ohne die ursprüngliche Eingabe kein Digest in den anderen überführen. Ein Werkzeug, das den Rückweg anbietet, fährt denselben Nachschlage- oder Neu-Hash-Trick.
MD5 ist gebrochen – heißt das nicht, dass es umkehrbar ist?
Nein. Die Kollisionsresistenz von MD5 fiel 2004; das heißt, zwei Eingaben lassen sich auf denselben Digest zwingen. Einen Digest umzukehren ist ein Urbildangriff, und der beste bekannte kostet nach wie vor 2^123.4 Operationen. Für Signaturen ist MD5 gebrochen, invertierbar ist es deshalb nicht.
Wie migriere ich eine Datenbank mit MD5-Passwort-Hashes zu etwas Sichererem?
In MySQL ist der naheliegende Einzeiler UPDATE users SET password = SHA2(password, 256) falsch: Er hasht den gespeicherten MD5-Digest statt des Passworts. Speichern Sie stattdessen bcrypt(md5(password)) und prüfen Sie über denselben Wrapper, wobei Sie jeden Datensatz beim nächsten erfolgreichen Login aufrüsten. MD5 in SHA-256 einzuwickeln hilft nicht, denn beide sind schnelle Hashes und eine GPU verarbeitet jeden von beiden im selben brutalen Tempo.
Warum lieferte das doppelte Hashen ein anderes Ergebnis als erwartet?
Die MD5-Hex-Zeichenkette zu hashen und ihre 16 rohen Bytes zu hashen ergibt unterschiedliche SHA-256-Ausgaben. Beide sind gültig; es sind schlicht verschiedene Eingaben. Legen Sie eine Konvention fest und wenden Sie sie im Migrationsskript und im Login-Pfad identisch an.
Kann eine Regenbogentabelle die Eingabe hinter einem MD5-Hash zurückgewinnen?
Nur wenn die Eingabe ohne Salt gehasht wurde und bereits in der Tabelle steht, was in der Praxis kurze oder verbreitete Zeichenketten bedeutet. Lange Zufallseingaben lassen sich so nicht zurückgewinnen, und ein Salt pro Nutzer setzt vorberechnete Tabellen vollständig außer Kraft.
Gibt es einen MD5-zu-SHA-1-Konverter?
Nein. Jeder angebliche MD5-zu-SHA-1-Konverter hasht neu oder schlägt nach, denn MD5 bleibt auch hier eine Einwegfunktion und versperrt den Weg zu SHA-1 genauso wie den zu SHA-256. Haben Sie die ursprüngliche Eingabe noch, können Sie den Hash mit dem SHA-1-Generator neu berechnen; ohne sie lässt sich nichts konvertieren.