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
#include <stdio.h>
#include <string.h>
// hash fonksiyonu yaz
// merhaba'nın özetini yazdır
int main(void) {
return 0;
}Örnek çözüm
#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ı
unsigned int h = hash("____");
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 |