HMAC Üretici

Bir mesaj ve gizli anahtardan HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 veya HMAC-SHA512 değeri hesaplayın — API istek imzalama, webhook doğrulama ve JWT (HS256) imzaları için. Çıktıyı Hex, Base64 veya Base64URL biçiminde alın.

%100 tarayıcıda çalışır — mesajınız ve gizli anahtarınız sunucuya gönderilmez.
Mesaj veya gizli anahtar boşsa çıktı boş kalır.

HMAC Nedir, Ne İçin Kullanılır?

HMAC (Hash tabanlı Mesaj Doğrulama Kodu — Hash-based Message Authentication Code), bir mesajın hem bütünlüğünü hem de göndereni doğrulamak için kullanılan bir mekanizmadır. Düz bir hash fonksiyonundan farklı olarak HMAC, mesajın yanında gizli bir anahtar da alır ve ikisini RFC 2104'te tanımlanan özel bir çift-hash şemasıyla (anahtar+iç dolgu+mesaj önce hash'lenir, sonra anahtar+dış dolgu+bu sonuç tekrar hash'lenir) birleştirir. Böylece yalnızca aynı gizli anahtarı bilen taraflar geçerli bir HMAC üretebilir veya doğrulayabilir.

Kritik ayrım: HMAC, basitçe hash(anahtar + mesaj) hesaplamakla AYNI ŞEY DEĞİLDİR. Bu naif yaklaşım "uzatma saldırısı" (length-extension attack) adı verilen bir zafiyete açıktır — saldırgan, orijinal mesajı veya anahtarı bilmeden, mevcut bir hash'in üzerine ek veri ekleyip geçerli görünen yeni bir hash üretebilir. HMAC'in RFC 2104'teki çift-hash yapısı bu saldırıyı matematiksel olarak imkânsız hâle getirir; bu yüzden bir imza mekanizması gerektiğinde her zaman özel amaçlı HMAC kullanılmalı, kendi "anahtar+mesaj" birleştirmeniz asla icat edilmemelidir.

En yaygın kullanım alanları arasında API istek imzalama (birçok bulut sağlayıcısı isteğin değiştirilmediğini kanıtlamak için HMAC imzası ister), webhook doğrulama (Stripe, GitHub gibi servisler gönderdikleri her webhook isteğine bir HMAC-SHA256 imzası ekler; alıcı sunucu kendi gizli anahtarıyla aynı imzayı yeniden hesaplayıp karşılaştırarak isteğin gerçekten o servisten geldiğini doğrular) ve JWT'nin (JSON Web Token) HS256 imza algoritması sayılabilir. Bir geliştirici olarak, bir webhook entegrasyonunu test ederken veya bir API isteğinin imzasının neden doğrulanmadığını araştırırken bu aracı kullanarak beklenen HMAC değerini elle yeniden üretip karşılaştırabilirsiniz.

Bu araç tamamen tarayıcınızda çalışır; hesaplama, tarayıcının yerleşik Web Crypto API'si (crypto.subtle) ile yapılır — ne mesajınız ne de gizli anahtarınız hiçbir aşamada bir sunucuya gönderilmez. Çoğu modern kullanım için SHA-256 önerilir; çıktı biçimi olarak Hex okunabilirlik, Base64 kompaktlık, Base64URL ise URL/dosya adı içinde güvenle kullanılabilme (ör. JWT imzaları) sağlar.

Bunu da Dene

İşin bitti mi? Sırada bunlar olabilir.

Sık Sorulan Sorular

HMAC (Hash tabanlı Mesaj Doğrulama Kodu), bir mesajın gizli bir anahtarla birlikte hash'lenerek üretilen, hem bütünlük hem kimlik doğrulaması sağlayan bir değerdir (RFC 2104). Yalnızca aynı gizli anahtarı bilen taraf aynı HMAC değerini yeniden üretip doğrulayabilir.

Düz bir hash yalnızca veri bütünlüğünü kontrol eder — kimin ürettiği önemli değildir, herkes aynı hash'i hesaplayabilir. HMAC ise ek olarak bir gizli anahtar gerektirir; bu sayede yalnızca anahtarı bilen taraflar geçerli bir HMAC üretebilir, bu da hem bütünlük hem kimlik doğrulaması (authentication) sağlar. Basitçe anahtar+mesajı birleştirip hash'lemek (hash(anahtar+mesaj)) HMAC'in yerini tutmaz — bu naif yaklaşım "uzatma saldırısı"na (length-extension attack) karşı savunmasızdır.

Çoğu modern kullanım (webhook doğrulama, API imzalama, JWT HS256) için SHA-256 yeterli ve yaygın standarttır. Daha yüksek güvenlik marjı isteyen sistemler SHA-384/SHA-512 tercih edebilir. SHA-1 hâlâ bazı eski sistemlerle uyumluluk için desteklenir ama yeni bir entegrasyonda tercih edilmemelidir.

Hayır. Bu araçtaki tüm hesaplama tarayıcınızın yerleşik Web Crypto API'siyle (crypto.subtle) cihazınızda yapılır; ne mesaj ne de gizli anahtar hiçbir aşamada OpenMoon sunucularına veya başka bir yere gönderilmez.

İkisi de aynı baytları farklı biçimde gösterir, kriptografik olarak eşdeğerdir. Hex okunması/loglanması daha kolaydır ama iki katı uzundur; Base64 daha kompakttır ve HTTP header'larında/JSON'da sık kullanılır. Base64URL ise URL veya dosya adı içinde güvenle kullanılabilmesi için +// karakterlerini -/_ ile değiştirir ve dolgu (=) içermez — JWT imzaları bu biçimi kullanır.

Son güncelleme: