CodeBlanks Logo Icon CodeBlanks

HMAC

crypto.createHmac ile HMAC öğrenirsin.

HMAC

HMAC (Hash-based Message Authentication Code), bir hash'e anahtar ekler. Yalnızca doğru anahtara sahip olanlar özeti doğrulayabilir; bu yüzden veri bütünlüğü ve kimlik doğrulama için kullanılır.

Örnek: crypto.createHmac("sha256", "anahtar").update("veri").digest("hex"). Burada "anahtar" simetrik bir sırdır (secret); alıcı ve verici paylaşır. createHash'ten farkı: hash herkes tarafından üretilebilir, HMAC ise yalnızca anahtar sahibi tarafından. Webhook imzalama, JWT (JSON Web Token) ve API isteği doğrulama için yaygındır. Alıcı, kendi anahtarıyla aynı HMAC'i hesaplar; eşitse veri değiştirilmemiştir ve güvenilir kaynaktan gelir. Anahtar sızarsa HMAC işe yaramaz; bu yüzden anahtar çevre değişkeninde tutulur.

HMAC doğrulama

HMAC ürettikten sonra doğrulamak için alıcı aynı anahtarla aynı hesabı yapar ve iki özeti karşılaştırır. Eşitse veri güvenlidir.

Örnek: const expected = crypto.createHmac("sha256", key).update(data).digest("hex"); if (expected === received) console.log("Geçerli");. Karşılaştırma için === yerine crypto.timingSafeEqual kullanmak daha güvenlidir; zamanlama saldırılarını (timing attack) engeller. Zamanlama saldırısı, karşılaştırma süresinden bilgi sızdırır. HMAC anahtarı her iki tarafta da aynı olmalıdır; farklısa özet farklı olur. Anahtar uzunluğu algoritmanın blok boyutundan küçük olmamalıdır; sha256 için 32 bayt önerilir. Üretimde anahtar process.env.HMAC_KEY'ten okunur.

Uygulama Veriyi HMAC ile imzala

const crypto = require("node:crypto"); ile içe aktar. const hmac = crypto.createHmac("sha256", "anahtar").update("veri").digest("hex"); ile imzala. console.log("HMAC uzunluğu: " + hmac.length) ile uzunluğu yazdır.

Başlangıç kodu

index.js
// crypto modülünü içe aktar
// buraya yaz

// "veri" dizesini HMAC ile imzala
// buraya yaz

// "HMAC uzunluğu: ..." yazdır
// buraya yaz

Örnek çözüm

index.js
const crypto = require("node:crypto");
const hmac = crypto.createHmac("sha256", "anahtar").update("veri").digest("hex");
console.log("HMAC uzunluğu: " + hmac.length);

Beklenen çıktı

HMAC uzunluğu: 64

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 createHmac kaç parametre alır?

index.js
crypto.createHmac("sha256", "anahtar")
  • 1: algoritma
  • 3: algoritma, anahtar, veri
  • 0: parametre yok
  • 2: algoritma ve anahtar Doğru cevap

Açıklama: createHmac algoritma ve anahtar olmak üzere iki parametre alır.

2 Parçayı rolüne eşle

Kavram Anlamı
createHmac Anahtarlı özet yaratır
anahtar Paylaşılan sır
update Veriyi ekler
timingSafeEqual Güvenli karşılaştırma

3 createHmac çağrısını tamamla

Soru
const hmac = crypto.____("sha256", "anahtar").update("veri").digest("hex");
Cevap
const hmac = crypto.createHmac("sha256", "anahtar").update("veri").digest("hex");

Açıklama: createHmac anahtarla özet yaratır.

Orta seviye bölümündeki tüm dersler