Eine Hash-Darstellung ist keine Neucodierung ihres Texts
Ein SHA-256-Ergebnis umfasst 256 Bit oder 32 Bytes. Base16 aus RFC 4648 stellt jedes Byte mit zwei Hexadezimalziffern dar: 64 Zeichen. Standard-Base64 mit Padding stellt dieselben 32 Bytes mit 44 Zeichen dar. Wird dagegen die 64-stellige Hex-Zeichenfolge als UTF-8-Text codiert, bestehen die Eingabedaten aus 64 Bytes und das Base64-Ergebnis hat 88 Zeichen. Es codiert den Anzeigetext des Hashs statt seiner rohen Bytes.
Vor der Tool-Nutzung die Eingabe prüfen
Wir berechneten SHA-256 für abc und reproduzierten beide Wege im Code. Moyoutils Hash-Tool gibt hexadezimalen Text aus. In das Base64-Tool eingefügt werden dessen UTF-8-Bytes codiert, wodurch 88 Zeichen entstehen. Dieses Tool interpretiert HEX nicht als rohe Hash-Bytes. Das separate Web-Crypto-Beispiel unterscheidet Bytes und HEX-Text und gibt beide Längen aus.
const raw = new Uint8Array(await crypto.subtle.digest(
'SHA-256', new TextEncoder().encode('abc')));
const hex = Array.from(raw,
n => n.toString(16).padStart(2, '0')).join('');
const rawBase64 = btoa(String.fromCharCode(...raw));
const textBase64 = btoa(hex); // ASCII HEX text
console.log(raw.length, hex.length,
rawBase64.length, textBase64.length);
// 32 64 44 88Prüfen Sie die geforderte Darstellung in der Dokumentation des empfangenden Systems. Base64 oder Base64url, Padding und die zu codierenden Daten sind getrennte Bedingungen. Eine passende Zeichenanzahl beweist keine passende Prüfsumme. Dieser Artikel erklärt Darstellungskonvertierung, keine Signaturprüfung oder Sicherheitsbewertung einer Datei.
Häufig gestellte Fragen
Berechnet die Base64-Konvertierung den Hash erneut?
Nein. Das Codieren roher Hash-Bytes ändert ihre Darstellung. HEX-Text verwendet andere Eingabedaten. Beides unterscheidet sich vom erneuten SHA-256-Berechnen der Originaldaten.