# Hashing

Adres: https://softwaredictionary.org/tr/terimler/hashing
Kategori: Güvenlik
Son güncelleme: 2026-09-29
Türkçe karşılığı: özetleme
Okunuşu: heşing

Kısaca: Hashing, bir girdiyi tek yönlü bir fonksiyonla sabit uzunlukta bir değere dönüştürmektir; veri bütünlüğünü doğrulamaya ve parolaları güvenle saklamaya yarar.

## Hashing nedir?

Bir hash fonksiyonu, parola, dosya veya mesaj gibi herhangi bir boyuttaki girdiyi alır ve hash ya da özet (digest) adı verilen sabit boyutlu bir çıktı üretir. Aynı girdi her zaman aynı hash'i verir, girdideki küçücük bir değişiklik tamamen farklı bir hash üretir ve hash'ten girdiye geri dönmek pratikte imkânsız olmalıdır.

Hashing; dosyaların değiştirilmediğini doğrulamak, içeriği tanımlamak (Git her commit'i bir hash ile adlandırır), hash tabloları gibi veri yapıları kurmak ve parolaları saklamak için kullanılır. Bütünlük kontrolleri ve dijital imzalar için SHA-256 gibi hızlı kriptografik hash'ler kullanılır; MD5 ve SHA-1 gibi eskileri güvenlik amaçlı kullanım için kırılmıştır ve kaçınılmalıdır.

Parolalar özel muamele ister. Hızlı bir hash yerine Argon2id, bcrypt veya scrypt gibi yavaş ve salt'lı bir parola hashleme algoritması kullanın. Salt, hash'lemeden önce her parolaya eklenen rastgele bir değerdir; böylece aynı parolalar farklı hash'ler üretir. Kasıtlı yavaşlık ise çalınmış bir veritabanından parola tahmin etmeyi saldırganlar için çok pahalı hâle getirir.

Hashing sıklıkla şifrelemeyle karıştırılır. Şifreleme iki yönlüdür: bir anahtarla şifrelenen veri doğru anahtarla çözülebilir. Hashing tek yönlüdür; bu yüzden sunucu, girişi girilen parolayı hash'leyip saklanan hash'le karşılaştırarak kontrol eder, asla orijinal parolayı geri elde ederek değil.

## Önemli noktalar

- Hash fonksiyonu, herhangi bir girdiyi sabit uzunlukta bir çıktıya dönüştürür.
- Aynı girdi her zaman aynı hash'i üretir.
- Hashing tek yönlüdür; şifreleme ise anahtarla geri döndürülebilir.
- Bütünlük kontrolleri için MD5 veya SHA-1 değil, SHA-256 veya daha güçlüsünü kullanın.
- Parolaları Argon2id veya bcrypt gibi salt'lı, yavaş bir algoritmayla saklayın.

## Örnek: Güvensiz ve güvenli parola saklama (Node.js)

```javascript
import { createHash } from "node:crypto";
import bcrypt from "bcrypt";

// Unsafe: fast and unsalted, so leaked hashes are easy to crack
const weak = createHash("sha256").update(password).digest("hex");

// Safe: bcrypt adds a random salt and is deliberately slow
const stored = await bcrypt.hash(password, 12);

// At login, compare the entered password with the stored hash
const ok = await bcrypt.compare(loginAttempt, stored);
```

## Sık sorulan sorular

**Hashing ile şifreleme arasındaki fark nedir?**

Şifreleme geri döndürülebilirdir: doğru anahtara sahip herkes şifrelenmiş veriyi orijinal hâline çevirebilir. Hashing tek yönlüdür; orijinal girdi hash'ten geri elde edilemez. Bu da onu, veriyi sonradan okunmak üzere gizlemekten çok doğrulamak için uygun kılar.

**Parola hashlemede salt nedir?**

Salt, her parola için üretilen ve hash'lemeden önce parolayla birleştirilen rastgele bir değerdir. Aynı parolaların farklı hash'ler almasını sağlar ve rainbow table adı verilen önceden hesaplanmış arama tablolarını etkisiz kılar.

**Bir hash geri çevrilebilir mi?**

Güvenli bir hash matematiksel olarak geri çevrilemez, ancak saldırganlar girdileri tahmin edip hash'leyerek sonuçları karşılaştırabilir. Hızlı hash'lerle saklanan zayıf parolaların kolayca kırılmasının ve yavaş parola hashleme algoritmalarının var olmasının nedeni budur.

## Kaynaklar

- [NIST FIPS 180-4: Secure Hash Standard (SHS)](https://csrc.nist.gov/pubs/fips/180-4/upd1/final)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
