CodeBlanks Logo Icon CodeBlanks

HMAC

  • C kursu
  • İleri seviye
  • Ders 57/83
  • 5 dk

HMAC ile mesaj doğrulama öğrenirsin.

HMAC nedir?

HMAC (Hash-based Message Authentication Code), bir anahtarla birlikte hash kullanarak mesaj doğrulama kodu üretir. Alıcı, aynı anahtarla aynı kodu hesaplayıp karşılaştırır; eşitse mesaj değişmemiş ve gönderen doğrudur.

OpenSSL'de HMAC(EVP_sha256(), key, keylen, data, datalen, digest, &len) ile tek çağrıda hesaplanır. key gizli anahtar, data mesajdır. HMAC, hash'in aksine anahtarsız doğrulanamaz; bu yüzden hem bütünlük hem de özgünlük sağlar. Test için sabit tamam mesajı yazdırmak yeterlidir.

HMAC deseni

HMAC tek çağrıda hesaplanır: unsigned char digest[EVP_MAX_MD_SIZE]; unsigned int len = 0; HMAC(EVP_sha256(), "anahtar", 7, (const unsigned char *)"mesaj", 5, digest, &len);. digest 32 baytlık doğrulama kodudur.

Alıcı aynı anahtar ve mesajla aynı kodu hesaplar; memcmp ile karşılaştırır. Eşitse mesaj doğrudur. Test için printf("hmac tamam\n") yazdırmak yeterlidir; kodun kendisi ortam bağımsızdır ama bayt değerlerini yazdırmak karmaşık olur. Üretimde kodu hex olarak gösterirsin.

Uygulama HMAC hesapla

unsigned char digest[EVP_MAX_MD_SIZE]; unsigned int len = 0; tanımla. HMAC(EVP_sha256(), "anahtar", 7, (const unsigned char *)"mesaj", 5, digest, &len); ile hesapla. printf("hmac tamam\n");.

Başlangıç kodu

main.c
#include <stdio.h>
#include <openssl/hmac.h>

// HMAC hesapla
// tamam yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <openssl/hmac.h>

int main(void) {
    unsigned char digest[EVP_MAX_MD_SIZE];
    unsigned int len = 0;
    HMAC(EVP_sha256(), "anahtar", 7, (const unsigned char *)"mesaj", 5, digest, &len);
    printf("hmac tamam\n");
    return 0;
}

Beklenen çıktı

hmac tamam

Soru ve cevaplar

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

1 HMAC çağrısı

Soru
HMAC(____, "anahtar", 7, (const unsigned char *)"mesaj", 5, digest, &len);
Cevap
HMAC(EVP_sha256(), "anahtar", 7, (const unsigned char *)"mesaj", 5, digest, &len);

Açıklama: HMAC, EVP_sha256() ile SHA-256 tabanlı doğrulama yapar.

2 HMAC parçalarını eşle

Kavram Anlamı
HMAC Doğrulama kodu
anahtar Gizli
EVP_sha256 Hash algoritması
memcmp Karşılaştırma

3 HMAC ne için kullanılır?

  • Mesaj doğrulama Doğru cevap
  • Şifreleme
  • Sıkıştırma
  • Rastgele sayı

Açıklama: HMAC mesaj doğrulama ve bütünlük için kullanılır.

İleri seviye bölümündeki tüm dersler