Yan yana
ŞifrelemevsHashing
Şifreleme (encryption) ile hashing arasındaki fark nedir?
Güncellendi 2 dk okuma7 fark
Kısaca
Şifreleme veriyi çözülebilecek şekilde bir anahtarla karıştırır; hashing ise geri çevrilemeyen, sabit uzunlukta bir parmak izi üretir; parolalar için idealdir.
Şifreleme
Encryption
Şifreleme, veriyi bir anahtarla karıştırarak yalnızca doğru anahtara sahip olanın onu özgün ve okunabilir hâline geri çevirebilmesini sağlama işlemidir.
Şifreleme sayfasını okuHashing
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 sayfasını okuŞifreleme ve Hashing karşılaştırması
| Özellik | Şifreleme | Hashing |
|---|---|---|
| Yön | İki yönlü: doğru anahtarla çözülür | Tek yönlü: geri döndürülemez |
| Anahtar | Paylaşılan bir anahtar ya da açık/özel anahtar çifti gerektirir | Anahtar gerekmez; HMAC varyantları gizli bir anahtar ekler |
| Çıktı boyutu | Girdinin boyutuyla birlikte büyür | SHA-256'da 256 bit gibi sabit uzunluk |
| Aynı girdi | Her seferinde farklı şifreli metin verebilir | Her zaman aynı hash'i verir |
| Amaç | Veriyi gizli tutmak | Bütünlüğü doğrulamak ve değerleri karşılaştırmak |
| Tipik kullanımlar | HTTPS, disk şifreleme, mesajlaşma, yedekler | Parola saklama, sağlama toplamları (checksum), imzalar, tekilleştirme |
| Yaygın algoritmalar | AES, ChaCha20, RSA, eliptik eğri şemaları | SHA-256, SHA-3, BLAKE3; parolalar için Argon2 ve bcrypt |
Fark, açıklamalı
Şifreleme, okunabilir veriyi (düz metin, plaintext) bir algoritma ve bir anahtarla okunamaz şifreli metne (ciphertext) dönüştürür; doğru anahtara sahip olan herkes onu geri çevirebilir. Hashing ise veriyi tek yönlü bir fonksiyondan geçirir ve her zaman sabit boyutlu bir çıktı üretir; buna hash ya da özet (digest) denir, SHA-256'nın 256 bitlik sonucu gibi.
Temel fark geri döndürülebilirliktir ve amaçlarından doğar. Şifreleme, mesajlar, yedekler ya da kart numaraları gibi tekrar okumanız gereken verileri korur; bu yüzden yetkili taraflar için geri döndürülebilir olmalıdır. Hashing ise verinin eşleştiğini ya da değişmediğini kanıtlar: aynı girdi her zaman aynı hash'i üretir, ama girdiyi ondan geri elde edemezsiniz.
Çoğu zaman birlikte kullanılırlar. HTTPS'nin arkasındaki güvenlik katmanı olan TLS trafiği şifreler, ama anahtarları türetmek ve el sıkışma mesajlarını doğrulamak için hash fonksiyonlarına dayanır; dijital imzalar da bir belgeyi özel anahtarla imzalamadan önce hash'ler. Parola saklama, çalınan hash'lerin kırılmasını zorlaştırmak için Argon2, scrypt ya da bcrypt gibi özel, yavaş ve tuzlu (salted) hash'ler kullanır.
Sık yapılan bir yanlış, Base64 gibi kodlamanın şifreleme olduğu ya da parolaları düz SHA-256 ile hash'lemenin yeterli olduğu düşüncesidir. Base64, anahtar olmadan herkes tarafından geri çevrilebilir ve hızlı hash'ler modern GPU'larda saniyede milyarlarca denemeyle tahmin edilebilir; bu yüzden parolalar için benzersiz bir tuzla kasten yavaş bir hash gerekir.
Hangisini kullanmalısınız?
Şifreleme şu durumlarda doğru seçim:
- Özgün veriyi daha sonra tekrar okumanız gerekiyor.
- Veri, mesajlar ya da dosyalar gibi iletim sırasında veya durağan hâlde gizli kalmalı.
- İçeriğe yalnızca anahtarı olan kişiler veya sistemler erişebilmeli.
Hashing şu durumlarda doğru seçim:
- Parolalarda olduğu gibi yalnızca bir değerin eşleştiğini denetlemeniz gerekiyor.
- Bir dosyanın ya da mesajın değişip değişmediğini tespit etmek istiyorsunuz.
- Aramalar ya da tekilleştirme için kısa, sabit boyutlu bir parmak izine ihtiyacınız var.
Geri döndürülebilir şifreleme ile tek yönlü hash
from cryptography.fernet import Fernet
key = Fernet.generate_key() # keep this secret
box = Fernet(key)
token = box.encrypt(b"card 4242 4242 4242 4242")
print(box.decrypt(token)) # the original bytes come backimport hashlib
digest = hashlib.sha256(b"hello world").hexdigest()
print(digest) # always the same 64 hex characters
# There is no "decrypt": you can only hash again and compare
print(hashlib.sha256(b"hello world").hexdigest() == digest)
# For passwords, use a slow salted hash like Argon2 or bcryptSık sorulan sorular
Bir hash çözülebilir mi?
Hayır. Hash fonksiyonu tek yönlüdür, bu yüzden çözülecek bir şey yoktur. Saldırganlar bunun yerine girdileri tahmin eder ve hash'leri karşılaştırır; bu yüzden zayıf ya da tuzsuz parola hash'leri yine de kırılabilir.
Parolalar şifrelenmeli mi, hash'lenmeli mi?
Hash'lenmeli; hem de Argon2, scrypt veya bcrypt gibi parolalar için tasarlanmış yavaş ve tuzlu bir algoritmayla. Şifrelenmiş parolaların hepsi, anahtar sızarsa bir anda ifşa olabilir.
Base64 şifreleme midir?
Hayır. Base64, ikili verinin metin olarak güvenle gönderilmesini sağlayan bir kodlamadır ve herkes onu anahtar olmadan çözebilir.