HMAC Generator

HMAC adalah algoritma di balik sebagian besar webhook bertanda tangan, header AWS Signature v4, dan token JWT HS256. Masukkan pesan dan kunci rahasia, pilih keluarga hash, dan generator ini menghasilkan HMAC persis sebagaimana ditentukan RFC 2104, berguna untuk memverifikasi apa yang akan dikirim backend Anda, atau mereproduksi tanda tangan yang Anda terima dari API.

Cara menghitung HMAC

  1. 1

    Tempel pesan

    Byte tepat yang akan ditandatangani: payload webhook, request kanonis, atau string apa pun.

  2. 2

    Masukkan secret key

    Bisa teks atau hex. Generator mem-pad atau meng-hash-nya ke ukuran blok sesuai RFC.

  3. 3

    Pilih algoritma hash

    SHA-256 adalah default; pilih SHA-1, SHA-384, SHA-512, atau MD5 untuk kompatibilitas lawas.

  4. 4

    Salin tanda tangan

    Output berupa hex huruf kecil, siap ditempel ke konfigurasi webhook atau header Authorization.

HMAC di balik layar

HMAC membungkus fungsi hash biasa dalam konstruksi keyed sehingga tanda tangan tidak bisa dipalsukan tanpa key.

Resep RFC 2104

HMAC(k, m) = H((k' ⊕ opad) ∥ H((k' ⊕ ipad) ∥ m))

di mana k' adalah key yang di-pad ke ukuran blok hash, opad = 0x5c diulang, dan ipad = 0x36 diulang.

Pilihan algoritma

Algoritma Ukuran blok Panjang output Direkomendasikan untuk
HMAC-SHA-256 64 byte 32 byte Default modern, penandatanganan webhook
HMAC-SHA-384 128 byte 48 byte Penandatanganan API keamanan lebih tinggi
HMAC-SHA-512 128 byte 64 byte Token berumur panjang
HMAC-SHA-1 64 byte 20 byte Lawas (AWS S3 v2, OAuth 1.0)
HMAC-MD5 64 byte 16 byte Hanya lawas; hindari untuk kerja baru

Di mana HMAC muncul

  • Webhook GitHub, Stripe, Shopify: header X-Hub-Signature-256, Stripe-Signature, dll.
  • AWS Signature v4: rantai HMAC-SHA256 atas request kanonis.
  • JWT HS256: tanda tangan token adalah HMAC-SHA-256(header.payload, secret).
  • Token reset password: HMAC atas user_id + kedaluwarsa + secret situs.

Kesalahan umum

  • Mengirim key ber-encode hex sebagai teks alih-alih men-decode-nya ke byte dulu.
  • Menandatangani byte payload yang salah: beberapa webhook menandatangani body request mentah termasuk spasi, yang lain menandatangani bentuk kanonis.
  • Memakai == di JavaScript atau Python untuk membandingkan tanda tangan; selalu pakai perbandingan timing-safe untuk menahan serangan timing.

Pertanyaan yang Sering Diajukan

Hampir selalu karena byte pesan berbeda. Menandatangani body yang sudah di-parse JSON memunculkan perubahan spasi; tandatangani body request mentah. Verifikasi juga key di-decode dengan cara sama (hex vs byte mentah) di kedua sisi.

Ya. Jika key lebih pendek dari ukuran blok hash ia di-pad nol; jika lebih panjang, ia di-hash dulu. RFC 2104 merekomendasikan key setidaknya sepanjang output (32 byte untuk SHA-256).

HMAC masih tahan terhadap serangan collision MD5 yang diketahui karena serangan itu tidak berlaku pada konstruksi HMAC. Tetap saja, gunakan HMAC-SHA-256 untuk kode baru mana pun, tooling dan auditor mengharapkannya.

Ya. Pesan dan kunci rahasia dikirim ke server kami melalui koneksi HTTPS terenkripsi agar HMAC dapat dihitung. Keduanya hanya dipakai untuk perhitungan dan tidak disimpan atau dicatat.

Alat Terkait

Alat ini tersedia dalam bahasa lain