Cara menggunakan
- Tempel string hex ke kolom masukan. Hex sudah dipilih sebagai format sumber dan Base64 sebagai format tujuan.
- Tidak perlu merapikan format: spasi, jeda baris, titik dua, tanda hubung, serta awalan 0x atau \x diabaikan.
- Ganti format tujuan ke Base64URL jika nilainya akan dipakai dalam URL, JWT, atau JSON Web Key.
- Salin hasil Base64.
Mengapa mengonversi hex ke Base64
Sebagian besar alat hashing menampilkan digest dalam hex, tetapi banyak protokol mengharapkan Base64, yang sepertiga lebih pendek. Contoh umumnya:
- Subresource Integrity. Atribut
integritypada skrip dan stylesheet berisi digest Base64, misalnyasha384-diikuti 64 karakter Base64. - Content Security Policy. Hash yang mengizinkan skrip inline ditulis sebagai
'sha256-...'dengan nilai Base64. - Checksum di API HTTP. Header
Content-MD5dan header checksum Amazon S3 membawa Base64 dari digest biner, bukan string hex yang ditampilkan olehmd5sum. - Pengenal yang ringkas. UUID berukuran 16 byte: 32 digit hex, tetapi hanya 22 karakter sebagai Base64URL tanpa padding.
Format hex yang diterima
Digit hex tidak peka huruf besar-kecil. Sebelum mendekode, konverter menghapus spasi kosong, jeda baris, titik dua, titik koma, koma, tanda hubung, serta awalan 0x, \x, %, dan &#x. Dengan begitu, sidik jari OpenSSL seperti AB:CD:EF, array C seperti 0x12, 0x34, string escape seperti \x12\x34, byte berpengodean persen, dan UUID dengan tanda hubung semuanya dapat diproses.
Setelah dibersihkan, masukan harus berisi jumlah digit yang genap, dua digit per byte. Jumlah ganjil dilaporkan sebagai kesalahan dan biasanya berarti angka nol di depan hilang, misalnya abc padahal yang dimaksud 0abc.
Enkode byte-nya, bukan teks hex
Kesalahan yang sering terjadi adalah menempelkan digest hex ke encoder teks-ke-Base64 biasa. Cara itu mengenkode karakter 0-9a-f, bukan byte yang diwakilinya, dan hasilnya dua kali lebih panjang dari seharusnya: 88 karakter untuk digest SHA-256, bukan 44. Apa pun yang mengharapkan digest biner, seperti atribut SRI atau header checksum, akan menolaknya. Konverter ini mendekode hex menjadi byte terlebih dahulu.
# Shell: digest hex ke Base64
printf '%s' "$HEX" | xxd -r -p | base64
# Nilai SRI untuk sebuah file dalam satu langkah
openssl dgst -sha384 -binary script.js | openssl base64 -A
# Python
base64.b64encode(bytes.fromhex(h)).decode()
// Node.js (berhenti diam-diam pada karakter non-hex pertama)
Buffer.from(h, 'hex').toString('base64')
Pertanyaan yang sering diajukan
Mengapa string hex saya menghasilkan kesalahan?
Ada dua kemungkinan: masukan berisi karakter yang bukan digit hex, misalnya huruf O alih-alih angka nol, atau jumlah digitnya ganjil. Pesan kesalahan menunjukkan posisi karakter yang tidak valid; jika panjangnya ganjil, periksa apakah angka 0 di depan hilang.
Seberapa panjang keluaran Base64-nya?
=.Bagaimana cara membuat hash Subresource Integrity?
integrity="sha384-..." dengan nilai Base64 tersebut. Dengan OpenSSL Anda dapat melakukannya dalam satu perintah: openssl dgst -sha384 -binary file.js | openssl base64 -A.Apakah keluarannya Base64 standar atau aman untuk URL?
+ dan /, sesuai yang diwajibkan oleh SRI, CSP, dan header checksum HTTP. Pilih Base64URL sebagai pengodean tujuan jika Anda memerlukan keluaran yang aman untuk URL.