CodeBlanks Logo Icon CodeBlanks

Hash fonksiyonları

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

Hash fonksiyonları ve özet çıkarmayı öğrenirsin.

Hash fonksiyonları

Hash fonksiyonu, herhangi boyuttaki veriyi sabit boyutlu bir özete dönüştürür. İyi bir hash deterministiktir (aynı girdi her zaman aynı çıktı), tek yönlüdür (çıktıdan girdi çıkaramazsın) ve çığ etkisi yapar (küçük girdi değişikliği büyük çıktı değişikliği üretir).

Özet, veri bütünlüğü için kullanılır: dosya indirme, parola saklama, dijital imza. C'de basit bir hash yazılabilir; ama üretim için SHA-256 gibi standart bir algoritma kullanılır. Bu derste karakter kodlarını toplayan basit bir hash yazacağız; özetin nasıl göründüğünü göreceğiz.

Basit hash yazma

Basit bir hash: karakter kodlarını topla. unsigned int hash(const char *s) tanımla; while (*s) { h += (unsigned char)*s; s++; } ile döngü kur. Dönüş h'dır. Bu hash zayıftır ama kavramı gösterir.

Test için printf("özet: %u\n", hash("merhaba") % 100) yazdır. "merhaba" karakterleri 109+101+114+104+97+98+97 = 720 eder; 720 % 100 = 20. Yani çıktı özet: 20 olur. Bu deterministiktir. Üretimde SHA-256 kullanılır; orada özet 32 bayttır.

Uygulama Basit hash yaz

unsigned int hash(const char *s) fonksiyonu tanımla. İçinde unsigned int h = 0;, while (*s) { h += (unsigned char)*s; s++; }, return h;. main içinde printf("özet: %u\n", hash("merhaba") % 100);.

Başlangıç kodu

main.c
#include <stdio.h>
#include <string.h>

// hash fonksiyonu yaz
// merhaba'nın özetini yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <string.h>

unsigned int hash(const char *s) {
    unsigned int h = 0;
    while (*s) {
        h += (unsigned char)*s;
        s++;
    }
    return h;
}

int main(void) {
    printf("özet: %u\n", hash("merhaba") % 100);
    return 0;
}

Beklenen çıktı

özet: 20

Soru ve cevaplar

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

1 İyi bir hash fonksiyonu nasıl davranır?

  • Tersine çevrilebilir
  • Çıktı değişken boyutlu
  • Aynı girdi aynı çıktı Doğru cevap
  • Girdi ile çıktı benzer

Açıklama: Deterministik olmak iyi hash'in temel özelliğidir.

2 Hash çağrısı

Soru
unsigned int h = hash("____");
Cevap
unsigned int h = hash("merhaba");

Açıklama: merhaba stringi hash fonksiyonuna gider.

3 Hash kavramlarını eşle

Kavram Anlamı
özet Sabit boyut
deterministik Aynı girdi aynı çıktı
tek yönlü Geri dönüş yok
çığ etkisi Küçük değişiklik büyük fark

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