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.

Rohe Hash-Bytes: 32 Bytes zu 44 Base64-Zeichen; HEX-Text: 64 Bytes zu 88 Zeichen
Eigenes Diagramm des Byteflusses. A sind die rohen Hash-Bytes; B ist der 64-stellige HEX-Text. Die Base64-Zahlen 44 und 88 schließen Padding ein.

RFC 6234: SHA-256 digest size

RFC 4648 §4, §8: Base64 / Base16

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 88

Prü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.