Konverter Hex ke Base64

Tempel byte heksadesimal dan dapatkan data yang sama dalam bentuk Base64. Pemisah seperti spasi, titik dua, dan awalan 0x dihapus secara otomatis, sehingga hash dan sidik jari dapat ditempel apa adanya.

Berjalan sepenuhnya di browser Anda. Tidak ada yang diunggah.

Cara menggunakan

  1. Tempel string hex ke kolom masukan. Hex sudah dipilih sebagai format sumber dan Base64 sebagai format tujuan.
  2. Tidak perlu merapikan format: spasi, jeda baris, titik dua, tanda hubung, serta awalan 0x atau \x diabaikan.
  3. Ganti format tujuan ke Base64URL jika nilainya akan dipakai dalam URL, JWT, atau JSON Web Key.
  4. 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 integrity pada skrip dan stylesheet berisi digest Base64, misalnya sha384- diikuti 64 karakter Base64.
  • Content Security Policy. Hash yang mengizinkan skrip inline ditulis sebagai 'sha256-...' dengan nilai Base64.
  • Checksum di API HTTP. Header Content-MD5 dan header checksum Amazon S3 membawa Base64 dari digest biner, bukan string hex yang ditampilkan oleh md5sum.
  • 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?
Bagi jumlah digit hex dengan 2 untuk mendapatkan jumlah byte, lalu hitung 4 karakter untuk setiap 3 byte, dibulatkan ke atas. Digest SHA-256 sepanjang 64 digit menjadi 44 karakter Base64, termasuk satu tanda =.
Bagaimana cara membuat hash Subresource Integrity?
Hitung digest SHA-384 dari file, konversikan digest hex-nya di sini, lalu tulis 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?
Base64 standar dengan + dan /, sesuai yang diwajibkan oleh SRI, CSP, dan header checksum HTTP. Pilih Base64URL sebagai pengodean tujuan jika Anda memerlukan keluaran yang aman untuk URL.