Representasi hash berbeda dari encoding ulang teksnya

Hasil SHA-256 berukuran 256 bit atau 32 byte. Base16 RFC 4648 mewakili tiap byte dengan dua digit heksadesimal, sehingga menjadi 64 karakter. Base64 standar dengan padding mewakili 32 byte yang sama dengan 44 karakter. Namun, encoding string heksadesimal 64 karakter sebagai teks UTF-8 memakai 64 byte input dan menghasilkan 88 karakter Base64. Hasil itu mengodekan teks yang menampilkan hash, bukan byte hash mentah.

Byte hash mentah: 32 byte ke 44 karakter Base64; teks HEX: 64 byte ke 88 karakter
Diagram aliran byte buatan sendiri. A adalah byte hash mentah; B adalah teks HEX 64 karakter. Jumlah Base64 44 dan 88 termasuk padding.

RFC 6234: SHA-256 digest size

RFC 4648 §4, §8: Base64 / Base16

Periksa input sebelum memakai alat

Kami menghitung SHA-256 dari abc dan mereproduksi kedua jalur dengan kode. Alat hash Moyoutil menghasilkan teks heksadesimal. Menempelkannya ke alat Base64 mengodekan byte UTF-8 teks dan menghasilkan 88 karakter. Alat ini tidak menafsirkan HEX sebagai byte hash mentah. Contoh Web Crypto terpisah membedakan byte dan teks HEX serta menampilkan kedua panjangnya.

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

Periksa dokumentasi sistem penerima untuk representasi yang diwajibkan. Base64 atau Base64url, padding dan data yang dienkode adalah syarat terpisah. Panjang string yang cocok tidak membuktikan checksum yang cocok. Artikel ini menjelaskan perubahan representasi, bukan verifikasi tanda tangan atau penentuan keamanan file.

Pertanyaan yang Sering Diajukan

Apakah mengubah ke Base64 menghitung ulang hash?

Tidak. Encoding byte hash mentah mengubah representasinya. Encoding teks HEX memakai data input berbeda. Pisahkan keduanya dari penghitungan ulang SHA-256 data asli.