Pack Camo

HMAC Generator & Verifier

Signature HMAC-SHA256, SHA-1, SHA-384 dan SHA-512, dengan key hex, Base64 atau teks.

Semuanya berjalan di perangkat Anda — tidak ada yang diunggah.

Secret key

3 byte

Pesan

43 byte

Signature HMAC-SHA-256

  • HexMenghitung…
  • HEXMenghitung…
  • Base64Menghitung…
  • Base64urlMenghitung…
  • HeaderMenghitung…

Hitung HMAC, atau periksa HMAC yang dikirim webhook kepada Anda

HMAC generator ini menandatangani pesan dengan secret key menggunakan HMAC-SHA256, HMAC-SHA1, HMAC-SHA384 atau HMAC-SHA512, dan menampilkan signature dalam hex huruf kecil, hex huruf besar, Base64 dan Base64url sekaligus. Key dan pesan masing-masing dapat diketik sebagai teks biasa, hex atau Base64, sehingga alat ini bekerja dengan secret biner mentah maupun kata sandi. Tempel signature yang Anda terima — <code>sha256=…</code> dari GitHub, header Stripe <code>t=…,v1=…</code> atau Base64 biasa — dan alat ini memberi tahu apakah cocok. Perhitungan memakai Web Crypto API di browser Anda; key dan pesan tidak pernah meninggalkan halaman.

Cara membuat atau memverifikasi HMAC

  1. 1Pilih fungsi hash: SHA-256 adalah yang dipakai sebagian besar API dan webhook.
  2. 2Ketik atau tempel secret key dan pilih cara penulisannya: teks, hex atau Base64. Gunakan Key acak untuk membuat secret baru dengan panjang yang tepat.
  3. 3Tempel pesan — untuk webhook, body request mentah persis seperti yang diterima, byte demi byte.
  4. 4Salin signature dalam encoding yang Anda butuhkan. Untuk memeriksa signature, tempel ke Signature yang diharapkan; prefiks seperti sha256= dikenali dan diabaikan.

Apa itu HMAC?

HMAC (hash-based message authentication code, RFC 2104) adalah nilai pendek yang dihitung dari sebuah pesan dan secret key. Siapa pun yang mengetahui key dapat menghitung nilai yang sama dan dengan begitu memeriksa dua hal sekaligus: bahwa pesan tidak diubah di perjalanan, dan bahwa pesan dibuat oleh pemegang key. Tanpa key, penyerang tidak dapat memalsukan HMAC yang valid untuk pesan baru maupun menyesuaikannya setelah mengubah pesan.

HMAC bukan sekadar hash dari key dan pesan yang digabungkan. HMAC melakukan hash dua kali, dengan key dicampur ke pad dalam dan pad luar: H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ message)). Konstruksi inilah yang membuatnya aman dengan SHA-256 dan SHA-512, yang jika dipakai sendiri sebagai H(key ‖ message) rentan terhadap serangan length-extension.

Memverifikasi signature webhook

Sebagian besar penyedia webhook menandatangani setiap request dengan HMAC dari body dan menaruh hasilnya di sebuah header. Untuk memverifikasinya, hitung HMAC dari body mentah dengan signing secret Anda lalu bandingkan dengan nilai header. Kesalahan paling umum adalah melakukan hash pada objek JSON yang diserialisasi ulang, bukan byte yang diterima: urutan key yang berbeda atau satu spasi yang hilang mengubah signature sepenuhnya.

Beberapa penyedia menandatangani lebih dari body. Stripe menandatangani timestamp.body — nilai t dari header, titik, lalu payload — dan Slack menandatangani v0:timestamp:body. Susun string persis seperti itu sebagai pesan di sini, lalu tempel header lengkap ke kotak verifikasi; nilai v1= atau v0= akan diambil darinya.

GitHub
<code>X-Hub-Signature-256: sha256=&lt;hex&gt;</code>, HMAC-SHA256 dari body dengan webhook secret sebagai teks.
Stripe
<code>Stripe-Signature: t=…,v1=&lt;hex&gt;</code>, HMAC-SHA256 dari <code>t.body</code>.
Shopify
<code>X-Shopify-Hmac-Sha256: &lt;Base64&gt;</code>, HMAC-SHA256 dari body.
Slack
<code>X-Slack-Signature: v0=&lt;hex&gt;</code>, HMAC-SHA256 dari <code>v0:timestamp:body</code>.

Key teks, hex dan Base64

Key adalah urutan byte, dan cara penulisannya penting. Teks abc123 berukuran enam byte; hex abc123 adalah tiga byte yang sama sekali berbeda. Banyak layanan memberikan secret sebagai string hex atau Base64 tetapi mengharapkan Anda memakai string itu sendiri sebagai key teks — GitHub dan Stripe sama-sama begitu — sementara yang lain, seperti rantai signing gaya AWS dan app proxy Shopify, memakai byte hasil decode. Jika signature tidak cocok, mengganti encoding key adalah hal pertama yang perlu dicoba.

Untuk key baru, gunakan byte acak yang minimal sepanjang output hash: 32 byte untuk HMAC-SHA256, 64 untuk HMAC-SHA512. Key yang lebih panjang tidak menambah apa pun — apa pun yang melebihi ukuran blok hash akan di-hash terlebih dahulu.

Perbandingan constant-time

Saat server Anda memeriksa signature, bandingkan dengan fungsi constant-time seperti crypto.timingSafeEqual di Node.js, hmac.compare_digest di Python atau hash_equals di PHP. Perbandingan string biasa berhenti pada karakter pertama yang berbeda, dan waktu yang dibutuhkan dapat membocorkan seberapa banyak bagian signature palsu yang benar. Halaman ini memakai pola constant-time yang sama, sehingga kodenya bisa menjadi referensi sekaligus alat pemeriksa.

Jika Anda hanya butuh checksum biasa dari file atau teks, tanpa key, gunakan Hash Generator. Untuk menandatangani token, Generator JWT Secret membuat key HS256 dengan ukuran yang tepat.

Pertanyaan yang sering diajukan

Apa bedanya hash dan HMAC?
Hash seperti SHA-256 hanya bergantung pada data, sehingga siapa pun bisa menghitungnya ulang. HMAC juga bergantung pada secret key, sehingga hanya pemegang key yang dapat membuat atau memeriksanya. Itulah sebabnya HMAC menjadi bukti keaslian, bukan hanya integritas.
Mengapa HMAC saya tidak cocok dengan yang dari API?
Hampir selalu karena input-nya berbeda: pesan tidak sama byte demi byte dengan body mentah (JSON yang diserialisasi ulang, baris baru di akhir, akhir baris yang berbeda), key dibaca sebagai teks padahal layanan memaksudkan byte hex atau Base64 atau sebaliknya, atau penyedia menandatangani timestamp plus body, bukan body saja.
Algoritma HMAC mana yang sebaiknya saya pakai?
HMAC-SHA256 adalah pilihan standar dan dipakai hampir semua API. HMAC-SHA512 sama baiknya dan lebih cepat di server 64-bit. HMAC-SHA1 masih aman sebagai HMAC, meskipun ada collision SHA-1, tetapi gunakan hanya jika protokol mengharuskannya.
Apakah HMAC-SHA1 sudah tidak aman?
Tidak. Collision SHA-1 tidak memberi cara untuk memalsukan HMAC-SHA1 tanpa key, dan belum ada serangan praktis terhadap HMAC-SHA1. Algoritma ini tidak disarankan untuk desain baru, tetapi memverifikasi signature HMAC-SHA1 lama tetap aman.
Bisakah saya menghitung HMAC-MD5 di sini?
Tidak. Web Crypto API di browser, yang dipakai halaman ini, tidak mendukung MD5. HMAC-MD5 hanya bertahan di protokol lama; gunakan HMAC-SHA256 untuk apa pun yang baru.
Berapa panjang key HMAC yang ideal?
Minimal sepanjang output hash: 32 byte acak untuk HMAC-SHA256, 48 untuk SHA-384, 64 untuk SHA-512. Tombol Key acak membuat persis sepanjang itu dari generator angka acak aman di browser Anda.
Bolehkah saya memakai key kosong?
HMAC mengizinkannya dan hasilnya terdefinisi dengan jelas, jadi alat ini menampilkannya, tetapi key kosong atau pendek tidak memberi keamanan apa pun. Siapa saja bisa menghitung signature yang sama.
Apakah secret key saya dikirim ke suatu tempat?
Tidak. HMAC dihitung oleh Web Crypto API di browser Anda pada halaman ini. Tidak ada yang Anda ketik diunggah atau disimpan.