Apakah alat ini?
HMAC bermaksud Hash-based Message Authentication Code. Ia menggabungkan kunci rahsia dengan mesej dan fungsi hash standard (seperti SHA-256) untuk menghasilkan digest panjang tetap. Sesiapa yang mempunyai kunci dan mesej yang sama akan mengira HMAC yang sama persis — tetapi tanpa kunci, mustahil dari segi pengiraan untuk menghasilkan HMAC yang sah bagi sesuatu mesej, walaupun anda tahu algoritma hash yang digunakan.
Itulah perbezaan utama daripada hash biasa: hash biasa (MD5, SHA-256, dsb.) hanya mengambil mesej sebagai input, jadi sesiapa sahaja boleh mengiranya dan ia tidak membuktikan apa-apa tentang siapa yang menciptanya. HMAC mengambil mesej *dan* kunci rahsia, jadi HMAC yang sah membuktikan penghantar memiliki rahsia tersebut — ia adalah mekanisme pengesahan, bukan sekadar semakan integriti.
HMAC diseragamkan secara rasmi oleh NIST dalam FIPS 198-1 dan ditakrifkan untuk protokol internet dalam IETF RFC 2104. Alat ini mengira HMAC menggunakan Web Crypto API asli pelayar anda (`crypto.subtle.sign` dengan algoritma HMAC), yang melaksanakan RFC 2104 dengan betul berbanding versi JavaScript yang ditulis sendiri.
Kenapa guna alat ini?
- Tandatangani permintaan API supaya pelayan penerima dapat mengesahkan permintaan itu datang daripada pemegang rahsia yang dikongsi dan tidak diusik.
- Sahkan muatan webhook (Stripe, GitHub, Shopify dan perkhidmatan serupa semuanya menandatangani badan webhook dengan HMAC-SHA256).
- Jana token pengesahan atau kod sekali guna yang bergantung pada rahsia yang dikongsi.
- Bandingkan output pelaksanaan HMAC anda sendiri dengan nilai rujukan yang diketahui betul.
- 100% tempatan: kunci rahsia dan mesej anda tidak pernah meninggalkan pelayar, jadi selamat untuk menguji rahsia sebenar.
Cara menggunakannya
- Masukkan kunci rahsia anda dalam medan "Secret Key".
- Masukkan mesej yang ingin anda sahkan dalam medan "Message".
- Hasil HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 dan HMAC-SHA512 dijana serta-merta (semak "Uppercase output" jika sistem sasaran anda memerlukan huruf besar).
- Klik "Copy" di sebelah HMAC yang anda perlukan.
Contoh
Input
Secret Key: key
Message: The quick brown fox jumps over the lazy dogHasil
HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9Ini adalah vektor ujian standard yang telah diterbitkan: dengan kunci "key" dan mesej ini secara tepat, HMAC-SHA256 dan HMAC-SHA1 sentiasa menghasilkan nilai ini pada mana-mana pelaksanaan yang betul, jadi anda boleh mengesahkan output alat ini secara bebas.
HMAC berbanding hash biasa: bila anda memerlukan kunci
Soalan penentu ialah: adakah anda perlu membuktikan siapa yang mencipta digest ini, atau sekadar kandungan itu tidak berubah? Jika checksum awam sudah memadai — mengesahkan fail yang dimuat turun sepadan dengan apa yang disenaraikan oleh penerbit, menyahduplikasi rekod — hash biasa berfungsi dan sesiapa sahaja boleh menyemaknya tanpa kunci. Jika anda perlu membuktikan digest itu hanya boleh dihasilkan oleh seseorang yang memegang rahsia tertentu — mengesahkan pemanggil API, mempercayai penghantar webhook — anda memerlukan HMAC, kerana hash biasa memberi penyerang tanpa rahsia keupayaan yang sama untuk memalsukan digest yang sah seperti penghantar sebenar.
→ Penjana Hash Pelbagai Algoritma · Penyahkod JWT · Penjana MD5
Membandingkan empat algoritma HMAC
Kesemua empat menggunakan struktur HMAC yang sama daripada RFC 2104, hanya berbeza pada fungsi hash asas dan justeru panjang outputnya.
| Algoritma | Saiz output | Kegunaan biasa |
|---|---|---|
| HMAC-SHA1 | 160-bit (40 aksara hex) | API lama, tandatangan OAuth 1.0a yang lebih tua |
| HMAC-SHA256 | 256-bit (64 aksara hex) | Penandatanganan permintaan API, JWT HS256, pengesahan webhook |
| HMAC-SHA384 | 384-bit (96 aksara hex) | Tandatangan jaminan lebih tinggi yang memerlukan output lebih panjang |
| HMAC-SHA512 | 512-bit (128 aksara hex) | Digest panjang maksimum untuk aplikasi keselamatan tinggi |
Kes penggunaan biasa
- Menandatangani permintaan API keluar dengan rahsia yang dikongsi supaya pelayan dapat mengesahkan identiti pemanggil.
- Mengesahkan muatan webhook masuk (Stripe-Signature, GitHub X-Hub-Signature-256 dan header serupa semuanya menggunakan HMAC-SHA256).
- Menjana dan mengesahkan bahagian tandatangan JWT yang ditandatangani dengan HS256/HS384/HS512.
- Menguji sama ada pelaksanaan HMAC pihak pelayan atau pihak klien anda sepadan dengan output yang dijangka sebelum menggunakannya.
Soalan lazim
Apakah itu HMAC?
HMAC (Hash-based Message Authentication Code) menggabungkan kunci rahsia dengan mesej menggunakan fungsi hash untuk menghasilkan digest yang membuktikan kedua-dua integriti mesej dan pemilikan kunci oleh penghantar. Ia ditakrifkan dalam NIST FIPS 198-1 dan IETF RFC 2104.
Apakah perbezaan antara HMAC dan hash biasa?
Hash biasa (SHA-256, MD5, dsb.) hanya mengambil mesej sebagai input — sesiapa sahaja boleh mengiranya, jadi ia hanya membuktikan mesej tidak rosak, bukan siapa yang menghantarnya. HMAC mengambil mesej ditambah kunci rahsia: jika anda perlu membuktikan mesej datang daripada seseorang yang memegang rahsia tertentu (tandatangan API, penghantar webhook), anda memerlukan HMAC. Jika anda hanya perlu menyemak fail atau mesej tidak berubah dan tidak kisah membuktikan pengarangnya, hash biasa sudah memadai.
Adakah kunci rahsia saya dihantar ke pelayan?
Tidak. Alat ini mengira HMAC sepenuhnya dalam pelayar anda menggunakan Web Crypto API. Kunci dan mesej anda tidak pernah dihantar ke mana-mana — anda boleh menguji rahsia produksi sebenar dengan selamat.
Algoritma manakah yang perlu saya gunakan — SHA-1, SHA-256, SHA-384 atau SHA-512?
Gunakan HMAC-SHA256 melainkan sistem tertentu memerlukan sebaliknya — ia adalah standard de facto untuk penandatanganan API (digunakan oleh AWS, Stripe, webhook GitHub dan kebanyakan API moden) serta menawarkan margin keselamatan yang kukuh. HMAC-SHA1 masih biasa digunakan dalam sistem lama (seperti pelaksanaan OAuth 1.0a yang lebih tua) tetapi hash asas SHA-1 dianggap lebih lemah; HMAC-SHA384/512 digunakan apabila output yang lebih panjang atau margin keselamatan tambahan diperlukan secara khusus.
Adakah HMAC-SHA1 tidak selamat, memandangkan SHA-1 biasa telah dipecahkan?
Serangan perlanggaran pada 2017 terhadap SHA-1 memecahkan SHA-1 sebagai fungsi hash biasa, tetapi HMAC-SHA1 masih dianggap selamat secara kriptografi kerana keselamatan HMAC tidak bergantung pada rintangan perlanggaran dengan cara yang sama. Walaupun begitu, lebih baik gunakan HMAC-SHA256 atau lebih tinggi untuk sistem baharu — tiada kelemahan praktikal dan ia mengelakkan persoalan ini sepenuhnya.
Apakah penggunaan HMAC yang biasa dalam dunia sebenar?
Menandatangani permintaan REST API supaya pelayan boleh mengesahkan pemanggil memegang rahsia API yang dikongsi; mengesahkan muatan webhook daripada perkhidmatan seperti Stripe, GitHub dan Shopify supaya anda tahu permintaan itu benar-benar datang daripada mereka dan tidak dipalsukan; menjana kata laluan sekali guna berasaskan masa (TOTP/HOTP) untuk pengesahan dua faktor; dan menandatangani token JWT dengan algoritma HS256/HS384/HS512.