Cara menggunakannya
- Masukkan kunci rahsia dan pilih sama ada ia teks biasa atau bait hex.
- Tampal mesej, contohnya payload webhook tepat seperti yang diterima.
- Pilih algoritma dan pengekodan output yang digunakan oleh perkhidmatan anda; HMAC dikemas kini semasa anda menaip.
- Untuk menyemak tandatangan, tampalkannya ke dalam kotak pengesahan dan cari “Padan”.
Cara ia berfungsi
HMAC (RFC 2104) menggabungkan kunci rahsia dengan fungsi hash untuk menghasilkan tandatangan yang hanya boleh dicipta oleh seseorang yang memiliki kunci tersebut. Perkhidmatan seperti webhook dan permintaan API bertandatangan menghantar HMAC bersama setiap mesej supaya penerima boleh menyemak bahawa mesej itu sahih dan tidak diubah.
Alat ini menggunakan Web Crypto API penyemak imbas anda (crypto.subtle.importKey dan sign) dan disemak terhadap vektor ujian RFC 4231 dan RFC 2202. Kunci teks dan mesej dikodkan sebagai UTF-8. Kunci hex dinyahkod kepada bait mentah; ruang, titik bertindih dan awalan 0x diabaikan. HMAC-SHA-256 ialah pilihan paling lazim; HMAC-SHA-1 masih dianggap selamat sebagai MAC tetapi kebanyakannya digunakan oleh API lama.
Jika tandatangan anda tidak sepadan, semak butiran yang paling kerap berbeza: bait mesej tepat (banyak penyedia webhook menandatangani badan mentah, bukan JSON yang diformat semula), cap masa atau awalan yang ditambah oleh penyedia kepada rentetan yang ditandatangani, sama ada kunci digunakan sebagai teks atau perlu dinyahkod daripada hex atau Base64 dahulu, dan sama ada tandatangan yang dijangkakan ialah hex atau Base64 serta membawa awalan seperti “sha256=”, yang patut anda buang sebelum membandingkan.
Contoh
Kes ujian RFC 4231
Kunci “Jefe” (teks), mesej “what do ya want for nothing?” dan HMAC-SHA-256 memberikan 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Gunakan “Cuba contoh” untuk memuatkannya.
Menyemak tandatangan webhook
Penyedia menghantar pengepala X-Signature: sha256=… dengan setiap permintaan. Tampalkan badan permintaan mentah sebagai mesej, rahsia webhook anda sebagai kunci, pilih HMAC-SHA-256 dan Hex, kemudian tampalkan nilai selepas “sha256=” ke dalam kotak sahkan.
Kunci berkod hex
Sesetengah sistem mengeluarkan kunci sebagai rentetan hex seperti 0b0b0b…. Pilih Hex sebagai format kunci supaya alat menandatangani dengan bait yang dinyahkod; melayan rentetan yang sama sebagai teks memberikan hasil yang berbeza sama sekali.
Soalan Lazim
Apakah perbezaan antara HMAC dengan hash biasa?
Sesiapa sahaja boleh mengira hash biasa seperti SHA-256 bagi sesuatu mesej. HMAC pula bergantung pada kunci rahsia, jadi hanya seseorang yang memiliki kunci itu boleh menghasilkan atau menyemaknya. Itu membuktikan mesej itu datang daripada pemegang kunci dan tidak diubah.
Mengapa HMAC saya tidak sepadan dengan yang daripada pelayan saya?
Bait input hampir selalu berbeza: penghujung baris, ruang kosong, susunan kunci JSON, pengekodan aksara, atau kunci yang sepatutnya dinyahkod daripada hex atau Base64. Juga bandingkan pengekodan yang sama (hex lawan Base64) dan buang awalan seperti “sha256=”.
Adakah kunci rahsia saya dihantar ke mana-mana?
Tidak. Kunci dan mesej hanya digunakan oleh Web Crypto API dalam tab penyemak imbas ini. Ia tidak dimuat naik, disimpan atau disertakan dalam analitik.
Adakah HMAC-SHA-1 masih selamat?
Perlanggaran SHA-1 tidak memecahkan HMAC-SHA-1 secara langsung, dan ia masih diterima untuk keserasian. Untuk sistem baharu, gunakan HMAC-SHA-256 atau yang lebih kuat.
Privasi
Kunci, mesej dan hasil hanya wujud dalam tab penyemak imbas ini. Tiada apa-apa dimuat naik, disimpan atau dihantar kepada analitik; hanya satu peristiwa tanpa nama tentang penggunaan alat ini direkodkan.