Ein Hash ist keine „Verschlüsselung“ – er kann nicht zum ursprünglichen Text zurückverschlüsselt werden (es ist eine „einseitige“ kryptografische Funktion und hat eine feste Größe für jede Größe des Ausgangstextes). Dies macht es geeignet, wenn es „hashed“ Versionen von Texten verglichen werden soll, im Gegensatz zum Entschlüsseln des Textes, um die ursprüngliche Version zu erhalten.
Zu diesen Anwendungen gehören Hash-Tabellen, Integritätsprüfung, Challenge-Handshake-Authentifizierung, digitale Signaturen usw.
‚Challenge handshake authentication‘ (oder ‚change hash authentication‘) verhindert die Übertragung von Passwörtern in ‚clear‘ – ein Client kann den Hash eines Passworts über das Internet zur Validierung durch einen Server senden, ohne dass das ursprüngliche Passwort abgefangen wird
Anti-Tamper – Verknüpft einen Hash einer Nachricht mit dem Original, und der Empfänger kann die Nachricht erneut hashen und mit dem bereitgestellten Hash vergleichen: Wenn sie übereinstimmen, ist die Nachricht unverändert. Dies kann auch verwendet werden, um keinen Datenverlust bei der Übertragung zu bestätigen
Digitale Signaturen sind eher involviert, aber im Wesentlichen können Sie den Hash eines Dokuments signieren, indem Sie es mit Ihrem privaten Schlüssel verschlüsseln und eine digitale Signatur für das Dokument erzeugen. Jeder andere kann dann überprüfen, ob Sie den Text authentifiziert haben, indem Sie die Signatur mit Ihrem öffentlichen Schlüssel entschlüsseln, um den ursprünglichen Hash erneut zu erhalten, und ihn mit dem Hash des Texts vergleichen.
Beachten Sie, dass Hash-Funktionen nicht zum Speichern von verschlüsselten Passwörtern geeignet sind, da sie für eine schnelle Berechnung ausgelegt sind und daher für Brute-Force-Angriffe geeignet sind. Schlüsselableitungsfunktionen wie bcrypt oder scrypt sind so konzipiert, dass sie sich nur langsam berechnen lassen und eher für das Speichern von Kennwörtern geeignet sind (npm verfügt über bcrypt- und scrypt-Bibliotheken und PHP über eine bcrypt-Implementierung mit password_hash).
SHA-256 ist eine der Nachfolger-Hash-Funktionen für SHA-1 (gemeinsam als SHA-2 bezeichnet) und ist eine der stärksten verfügbaren Hash-Funktionen. SHA-256 ist nicht viel komplexer zu programmieren als SHA-1 und wurde in keiner Weise kompromittiert. Der 256-Bit-Schlüssel macht es zu einer guten Partner-Funktion für AES. Es ist im NIST (National Institute of Standards and Technology) Standard „FIPS 180-4“ definiert. NIST stellt auch eine Anzahl von Testvektoren bereit, um die Korrektheit der Implementierung zu verifizieren. Es gibt eine gute Beschreibung bei Wikipedia.
Source: https://github.com/emn178/js-sha256