Nasıl kullanılır?
- Veriyi Mesaj alanına yazın. İkili veri için Mesaj biçimi altında Onaltılık ya da Base64 seçin.
- Gizli anahtarı Anahtar alanına yazın ve Anahtar biçimi altında nasıl yazıldığını seçin.
- HMAC değerleri tablosundaki dört satırı okuyun. İhtiyacınız olan değeri kopyalayın ya da sisteminizin verdiği değerle karşılaştırın.
- Değerler başka bir sistemle farklıysa önce baytları kontrol edin: farklı bir satır sonu ya da kodlama farklı bir HMAC verir.
HMAC nedir?
HMAC (RFC 2104), yalnızca gizli anahtarı bilen birinin üretebileceği kısa bir değerdir: bir mesajın değiştirilmediğini ve anahtarı bilen birinden geldiğini gösterir. Anahtar ile mesaj, bir özet fonksiyonu H'den iki kez geçirilerek oluşturulur.
HMAC mesajı gizlemez. Mesajı olan herkes okuyabilir; HMAC yalnızca mesajın doğruluğunu kontrol etmeyi sağlar.
HMAC(K, m) = H((K XOR opad) || H((K XOR ipad) || m))
ipad = 0x36 baytının B kez tekrarı
opad = 0x5C baytının B kez tekrarı
B = H'nin blok boyutu: SHA-1 ve SHA-256 için 64 bayt, SHA-384 ve SHA-512 için 128 bayt
Hangi özet fonksiyonu, hangi anahtar?
HMAC-SHA-256 en yaygın seçimdir; birçok webhook ve API bunu kullanır. HMAC-SHA-512 aynı yapının daha uzun çıktılı biçimidir. HMAC-SHA-1 eski sistemlerde hâlâ görülür; yeni tasarımlarda seçilmemelidir.
Anahtar rastgele ve en az özet çıktısı kadar uzun olmalıdır. Bir kelime ya da kısa bir cümleyle yazılmış anahtar kolay tahmin edilir ve tahmin edilen bir anahtarla HMAC değerinin bir anlamı kalmaz.
Onaltılık ve Base64
İki biçim de aynı baytları gösterir. Onaltılık her baytı iki rakamla yazar; SHA-256 değeri 64 rakamdır. Base64 üç baytı dört karakterle yazar; SHA-256 değeri 44 karakterdir ve sondaki = işareti dolgu içindir (RFC 4648).
- HMAC-SHA-1: 40 onaltılık rakam, 28 Base64 karakteri
- HMAC-SHA-256: 64 onaltılık rakam, 44 Base64 karakteri
- HMAC-SHA-384: 96 onaltılık rakam, 64 Base64 karakteri
- HMAC-SHA-512: 128 onaltılık rakam, 88 Base64 karakteri
Örnek: RFC 4231 test durumu 2
Anahtar Jefe ve mesaj what do ya want for nothing?, RFC 4231'in SHA-256, SHA-384 ve SHA-512 için ikinci test durumudur; SHA-1 için aynı çift RFC 2202'de yer alır. Aşağıdaki tablo sayfanın bunlar için gösterdiği sonuçtur ve HMAC-SHA-256 değeri RFC'nin yazdığı değerdir: 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843.
| Algoritma | Onaltılık | Base64 |
|---|---|---|
| HMAC-SHA-1 | effcdf6ae5eb2fa2d27416d5f184df9c259a7c79 | 7/zfauXrL6LSdBbV8YTfnCWafHk= |
| HMAC-SHA-256 | 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 | W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM= |
| HMAC-SHA-384 | af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649 | r0XS43ZIQDFhf3jStYprG5x+9GT1oBtH5C7Dc2MiRF6OIkDKXmnix4syOez6shZJ |
| HMAC-SHA-512 | 164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737 | Fkt6e/z4GeLjlfvnO1bgo4e9ZCIugx/WECcM1+olBVSXWL91wFqZSm0DT2X48Ob9yuqxo01Ka0tjbgcKOLznNw== |
Sık sorulan sorular
HMAC, mesajı şifrelemekle aynı şey mi?
Hayır. HMAC mesajı gizlemez; herkes okuyabilir. Yalnızca mesajın değiştirilmediğini ve gönderenin anahtarı bildiğini gösterir. Gizlilik gerekiyorsa şifreleme gerekir.
Özet (hash) ile HMAC arasındaki fark nedir?
Özet yalnızca mesaja bağlıdır, bu yüzden herkes hesaplayabilir. HMAC ise gizli anahtar ister; yalnızca anahtarı bilen biri onu üretebilir ya da doğrulayabilir. Düz özetler için özet hesaplayıcısına bakın.
Kütüphanem farklı bir HMAC veriyor, neden?
Anahtarın ya da mesajın baytları farklıdır. Metin olarak yazılan anahtar UTF-8 baytlarıdır; aynı harfler onaltılık yazılırsa başka baytlar olur. Mesajın sonundaki bir satır sonu da HMAC değerini değiştirir.
Hangi uzunlukta anahtar kullanmalıyım?
Özet çıktısı kadar uzun, rastgele bir anahtar kullanın: HMAC-SHA-256 için 32 bayt. RFC 2104, daha kısa anahtarı güçlükle önerir; kelimelerden ya da kısa bir cümleden yapılmış anahtar kolay tahmin edilir.
Bu sayfayla bir webhook imzasını kontrol edebilir miyim?
Evet, imzalanmış tam baytları kullanırsanız. Webhook imzaları genellikle ham istek gövdesi üzerinden hesaplanır; gövdeyi değiştirmeden yapıştırın, yeniden biçimlendirilmiş bir JSON farklı HMAC değeri verir.
Anahtarım ya da mesajım bir yere gönderiliyor mu?
Hayır. HMAC tarayıcınızda, tarayıcının kendi SubtleCrypto arayüzüyle hesaplanır. Anahtar ve mesaj yüklenmez ve hiçbir yerde saklanmaz.
Kaynaklar
- RFC 2104: HMAC: Keyed-Hashing for Message Authentication (İngilizce)
- RFC 4231: HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384 ve HMAC-SHA-512 için test vektörleri (İngilizce)
- RFC 2202: HMAC-MD5 ve HMAC-SHA-1 için test durumları (İngilizce)
- RFC 4648: Base16, Base32 ve Base64 veri kodlamaları (İngilizce)
- NIST FIPS 180-4: Güvenli Özet Standardı (İngilizce)
Rakamlar ve metin en son 10 Kasım 2026 Salı tarihinde kontrol edildi.