Hash Functions Explained for Developers (MD5, SHA-256, bcrypt)

March 2026 · 18 min read · 4,206 words · Last Updated: March 31, 2026Advanced

💡 Key Takeaways

  • What Hash Functions Actually Do (And Why You Should Care)
  • MD5: The Broken Hash Function That Won't Die
  • SHA-256: The Workhorse of Modern Cryptography
  • bcrypt: When Slow Is Actually Good

Ich erinnere mich noch an den Tag, an dem ich unserem CEO erklären musste, warum unsere gesamte Benutzerdatenbank kompromittiert war. Es war 2016, ich war seit acht Jahren Sicherheitstechniker und dachte, ich wüsste, was ich tat. Wir verwendeten MD5, um Passwörter zu hashen—eine Entscheidung, die Jahre vor meinem Eintritt getroffen wurde—und ein Angreifer hatte 87% unserer 340.000 Benutzerpasswörter in weniger als 48 Stunden geknackt. Der Vorfall kostete uns 2,3 Millionen Dollar für die Behebung, unzählige Ingenieurstunden und fast unsere Reputation ruiniert. Dieses Ereignis hat meine Sicht auf Hash-Funktionen transformiert, und genau deshalb schreibe ich das heute.

💡 Wichtige Erkenntnisse

  • Was Hash-Funktionen wirklich tun (und warum Sie sich darum kümmern sollten)
  • MD5: Die kaputte Hash-Funktion, die nicht stirbt
  • SHA-256: Das Arbeitstier der modernen Kryptographie
  • bcrypt: Wenn Langsam tatsächlich gut ist

Hash-Funktionen sind die unsichtbaren Wächter der modernen Software-Sicherheit, aber die meisten Entwickler, die ich betreue, verstehen sie nicht wirklich. Sie wissen, dass sie sie verwenden sollten, aber nicht, warum eine von einer anderen abweicht oder wann Geschwindigkeit eher eine Haftung als ein Vorteil ist. Dieser Artikel wird das ändern. Ich werde Sie durch die drei wichtigsten Hash-Funktionen führen, auf die Sie stoßen werden—MD5, SHA-256 und bcrypt—und erklären, wie sie funktionieren, wann man jede verwenden sollte und, noch wichtiger, wann man sie ganz meiden sollte.

Was Hash-Funktionen wirklich tun (und warum Sie sich darum kümmern sollten)

Eine Hash-Funktion nimmt eine Eingabe beliebiger Größe und produziert eine Ausgabe fester Größe, die als Hash oder Digest bezeichnet wird. Denken Sie daran wie an einen mathematischen Fleischwolf: Sie können eine ganze Kuh oder einen einzelnen Hamburger-Pattie hineingeben, aber was herauskommt, hat immer die gleiche Größe. Das Magische daran ist, dass dieser Prozess deterministisch ist—die gleiche Eingabe produziert immer die gleiche Ausgabe—aber es ist praktisch unmöglich, ihn umzukehren.

Was eine gute kryptografische Hash-Funktion ausmacht: Erstens, sie muss deterministisch sein. Hashen Sie "password123" eine Million Mal, und Sie erhalten jedes Mal dasselbe Ergebnis. Zweitens, sie muss in eine Richtung schnell zu berechnen sein, aber in umgekehrter Richtung rechnerisch unpraktisch. Drittens sollte selbst eine winzige Änderung in der Eingabe eine völlig andere Ausgabe erzeugen—dies wird als Lawineneffekt bezeichnet. Ändern Sie ein Bit in Ihrer Eingabe, und etwa 50% der Bits in der Ausgabe sollten sich ändern.

Viertens muss sie kollision-resistent sein. Eine Kollision tritt auf, wenn zwei unterschiedliche Eingaben den gleichen Hash-Wert produzieren. Während Kollisionen mathematisch unvermeidlich sind (es gibt unendlich viele mögliche Eingaben, aber nur finite mögliche Ausgaben), macht eine gute Hash-Funktion es so schwierig, Kollisionen zu finden, dass es praktisch unmöglich ist. Schließlich sollte die Ausgabe zufällig und gleichmäßig verteilt erscheinen, obwohl sie vollständig deterministisch ist.

Ich habe gesehen, dass Entwickler Hash-Funktionen mit Verschlüsselung verwechseln, also lassen Sie mich das klarstellen: Verschlüsselung ist reversibel mit dem richtigen Schlüssel, Hashing ist es nicht. Wenn Sie Daten verschlüsseln, haben Sie die Absicht, sie später zu entschlüsseln. Wenn Sie Daten hashen, erstellen Sie einen einseitigen Fingerabdruck. Diese Unterscheidung ist entscheidend, da sie bestimmt, welches Werkzeug Sie für welchen Job verwenden sollten.

In meiner täglichen Arbeit bei der Sicherung finanzieller Anwendungen verwende ich Hash-Funktionen aus drei Hauptgründen: zur Überprüfung der Datenintegrität (sicherstellen, dass Dateien nicht manipuliert wurden), zur Erstellung digitaler Signaturen und zur Speicherung von Passwörtern. Jeder Anwendungsfall hat unterschiedliche Anforderungen, weshalb das Verständnis der Unterschiede zwischen Hash-Funktionen so wichtig ist.

MD5: Die kaputte Hash-Funktion, die nicht stirbt

MD5 (Message Digest Algorithm 5) wurde 1991 von Ronald Rivest entworfen und erzeugt einen 128-Bit (16-Byte) Hash-Wert, der typischerweise als 32-Zeichen lange hexadezimale Zeichenfolge dargestellt wird. Über ein Jahrzehnt hinweg war es die bevorzugte Hash-Funktion für alles, von der Passwortspeicherung bis zur Überprüfung der Dateintegrität. Heute ist es kryptografisch gebrochen, und doch sehe ich es immer noch mindestens einmal im Monat im produktiven Code.

"Die schnellste Hash-Funktion ist oft die schlechteste Wahl für Sicherheit—Geschwindigkeit in der Kryptographie ist eine Verwundbarkeit, kein Feature."

Der erste ernsthafte Kollisionsangriff gegen MD5 wurde 2004 von Xiaoyun Wang und Kollegen veröffentlicht. Sie bewiesen, dass das Finden von Kollisionen viel einfacher war als die theoretisch erforderlichen 2^64 Operationen. Bis 2008 hatten Forscher zwei völlig unterschiedliche ausführbare Dateien erstellt, die denselben MD5-Hash ergaben. 2012 nutzte die Flame-Malware MD5-Kollisionen, um ein Microsoft-Digitalzertifikat zu fälschen. Die Zeichen standen nicht nur an der Wand—sie waren in neonfarbenen Buchstaben gesprüht.

So sieht MD5 in der Praxis aus. Der String "Hello, World!" ergibt den MD5-Hash: 65a8e27d8879283831b664bd8b7f0ad4. Ändern Sie nur ein Zeichen zu "Hello, World?" und Sie erhalten: 7f138a09169b250e9dcb378140907378. Beachten Sie, wie völlig unterschiedlich die Ausgabe ist—das ist der Lawineneffekt, der korrekt funktioniert. Das Problem ist nicht, dass MD5 diese grundlegende Anforderung nicht erfüllt; es ist, dass der Algorithmus mathematische Schwächen hat, die es Angreifern ermöglichen, Kollisionen viel schneller zu finden, als sie sollten.

Warum verwenden Entwickler also immer noch MD5? Geschwindigkeit und Vertrautheit. MD5 ist unglaublich schnell—auf meinem Entwicklungssystem kann ich etwa 400 Millionen MD5-Hashes pro Sekunde berechnen. Es ist auch in nahezu jeder Programmiersprache und jedem Framework verfügbar. Ich habe jede Ausrede gehört: "Wir verwenden es nur für Prüfziffern, nicht für die Sicherheit," oder "Unser System ist nicht wichtig genug für Angriffe," oder mein persönlicher Favorit, "Wir haben es schon immer so gemacht."

Ich will direkt sein: Es gibt genau zwei akzeptable Anwendungen für MD5 im Jahr 2026. Erstens können Sie es für nicht kryptografische Zwecke wie die Erstellung von Cache-Schlüsseln oder die Partitionierung von Daten verwenden, wo Kollisionen keine Rolle spielen. Zweitens benötigen Sie es möglicherweise für die Rückwärtskompatibilität mit veralteten Systemen, die Sie aktiv ersetzen wollen. Das war's. Wenn Sie MD5 für sicherheitsrelevante Dinge—Passwörter, digitale Signaturen, Zertifikatsprüfungen—verwenden, machen Sie einen Fehler, der Sie letztendlich kosten wird.

Das Leistungsargument ist nicht mehr haltbar. Moderne Alternativen wie SHA-256 sind schnell genug für nahezu jeden Anwendungsfall, und die Sicherheitsvorteile überwiegen die vernachlässigbaren Leistungsunterschiede bei Weitem. In den Finanzsystemen, an denen ich arbeite, verarbeiten wir täglich Millionen von Transaktionen, und der Wechsel von MD5 zu SHA-256 führte zu einer Verzögerung von weniger als 2 Millisekunden pro Transaktion—völlig unmerklich für die Benutzer, aber dramatisch sicherer.

SHA-256: Das Arbeitstier der modernen Kryptographie

SHA-256 (Secure Hash Algorithm 256-Bit) ist Teil der SHA-2-Familie, die von der NSA entworfen und 2001 veröffentlicht wurde. Es produziert einen 256-Bit (32-Byte) Hash-Wert, der typischerweise als 64-Zeichen lange hexadezimale Zeichenfolge dargestellt wird. Im Gegensatz zu MD5 hat SHA-256 keine bekannten praktischen Kollisionsangriffe, was es zum aktuellen Standard für die meisten kryptografischen Anwendungen macht.

C

Written by the Cod-AI Team

Our editorial team specializes in software development and programming. We research, test, and write in-depth guides to help you work smarter with the right tools.

Share This Article

Twitter LinkedIn Reddit HN

Related Tools

HTML to PDF Converter — Free, Accurate Rendering Help Center — cod-ai.com cod-ai.com API — Free Code Processing API

Related Articles

Prettify JSON Online: Format Messy JSON — cod-ai.com 10 TypeScript Tips That Reduce Bugs by 50% — cod-ai.com SQL Formatter: Make Queries Readable

Put this into practice

Try Our Free Tools →
Hash-FunktionGeschwindigkeitHauptanwendungsfallSicherheitsstatus
MD5Extrem schnell (~300 MB/s)Prüfziffern, DateiintegritätKryptografisch gebrochen - Nie für Passwörter verwenden
SHA-256Sehr schnell (~150 MB/s)Digitale Signaturen, Zertifikate, BlockchainSicher für Integrität, zu schnell für Passwörter
bcryptAbsichtlich langsam (einstellbar)Passwort-HashingEmpfohlen für die Passwortspeicherung
SHA-1Sehr schnell