Generator HMAC-SHA256
Buat tanda tangan HMAC-SHA256 dari pesan dan kunci rahasia. Alat ini mengodekan keduanya sebagai UTF-8, menerapkan konstruksi HMAC dari RFC 2104 dengan SHA-256, lalu mengembalikan tag 256 bit dalam format hex atau Base64. Pengembang menggunakannya untuk men-debug tanda tangan webhook dari layanan seperti Stripe, GitHub atau Slack, menandatangani permintaan API, dan membandingkan hasilnya dengan kode mereka sendiri. Kunci tidak pernah dikembalikan atau dicatat.
Pertanyaan yang sering diajukan
Apa itu HMAC-SHA256?
HMAC-SHA256 adalah kode autentikasi pesan yang dibuat dari SHA-256 dan kunci rahasia, sebagaimana ditetapkan dalam RFC 2104. Hanya orang yang memiliki kunci yang dapat menghitung tag yang benar untuk suatu pesan. Hasilnya berukuran 32 byte, atau 64 karakter hex.
Bagaimana cara memverifikasi tanda tangan webhook?
Tempelkan isi permintaan mentah yang persis sebagai pesan dan rahasia penandatanganan Anda sebagai kunci, lalu bandingkan hasilnya dengan header tanda tangan. Banyak layanan menandatangani gabungan nilai, seperti stempel waktu Stripe, titik, dan isi pesan, jadi susun pesan sesuai petunjuk dokumentasi layanan tersebut. Perubahan satu byte saja akan menghasilkan tag yang berbeda.
Apakah ada vektor uji yang diketahui?
Kasus uji 2 RFC 4231 menggunakan kunci Jefe dan pesan what do ya want for nothing? dan mengharapkan hasil 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Alat ini menghasilkan nilai yang persis sama.
Bagaimana kunci dan pesan dikodekan?
Keduanya dikodekan sebagai teks UTF-8. Jika rahasia Anda diberikan dalam hex atau Base64, seperti yang dilakukan beberapa layanan, byte-nya berbeda dari teks yang Anda lihat, jadi Anda perlu mendekode kunci terlebih dahulu dalam kode Anda sendiri. Spasi dan jeda baris diperhitungkan di kedua kolom.
Apakah kunci rahasia saya disimpan?
Tidak. Kunci hanya digunakan untuk menghitung tag selama permintaan berlangsung. Kunci tidak disertakan dalam respons, tidak dicatat, dan tidak disimpan.
Bisakah kunci kosong atau sangat panjang?
HMAC menerima kunci dengan panjang berapa pun, termasuk kunci kosong. Kunci yang lebih panjang dari 64 byte terlebih dahulu di-hash dengan SHA-256, sesuai spesifikasi RFC. Untuk penggunaan nyata, pilih kunci acak dengan panjang setidaknya 32 byte.
Sebaiknya saya memilih hex atau Base64?
Gunakan format yang dikirim oleh pihak lain. GitHub dan Stripe menggunakan hex, sedangkan Slack menambahkan awalan v0= pada hex dan banyak sistem berbasis AWS serta JWT menggunakan Base64. Keduanya mengodekan 32 byte yang sama.
Apakah HMAC-SHA256 sama dengan SHA-256 dari kunci dan pesan yang digabungkan?
Tidak. HMAC melakukan hash pada pesan dua kali dengan kunci berpadding bagian dalam dan luar, sehingga melindungi dari serangan ekstensi panjang. Menggabungkan kunci dan pesan lalu melakukan hash sekali menghasilkan nilai yang berbeda dan lebih lemah.
Bagaimana cara membandingkan tanda tangan dalam kode saya?
Gunakan fungsi perbandingan waktu konstan seperti crypto.timingSafeEqual di Node.js atau hmac.compare_digest di Python. Perbandingan string biasa dapat membocorkan informasi waktu tentang tag yang diharapkan.
Seberapa besar ukuran pesan yang diperbolehkan?
Ukuran gabungan pesan dan kunci dapat mencapai 5 MiB teks. Batas ini mencakup payload webhook umum dan permintaan API.