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.
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 88Periksa 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.