- MD5, her uzunluktaki veriden 128 bitlik, 32 haneli onaltılık bir özet üretir; özet tek yönlüdür, şifreleme sayılmaz.
- Girdideki tek karakter, görünmeyen bir boşluk ya da satır sonu özeti tamamen değiştirir: "hello" ile "Hello" bambaşka özet verir.
- MD5 çakışma saldırılarına açıktır; parola saklamak için bcrypt, scrypt ya da Argon2, güvenli özet için SHA-256 kullan.
- MD5'in bugünkü makul kullanımı dosya ve metin bütünlüğünü sağlamaktır; özeti indirdiğin sayfadan değil, ayrı ve güvenilir bir kaynaktan al.
MD5 hash aracı, yazdığın metnin 32 haneli MD5 özetini (hash değerini) hesaplar. Sonucu dosya ya da metin bütünlüğünü sağlama toplamı (checksum) olarak karşılaştırmak için kullanabilirsin. Güvenlik amacıyla ise MD5 kullanılmamalı.
Güvenlik uyarısı: MD5 şifre ve güvenlik için güvenli değildir; çakışma (collision) saldırılarına açıktır. Yalnızca sağlama ve bilgi amacıyla kullan. Parola saklamak için bcrypt, scrypt ya da Argon2 gibi parolalara özel, yavaş ve tuzlu yöntemleri; genel amaçlı güvenli özetleme için SHA-256 ve üzerini tercih et.

MD5 nedir?
MD5 (Message-Digest Algorithm 5), herhangi uzunluktaki veriyi 128 bitlik, yani 32 haneli onaltılık (hex) bir özete dönüştüren hash fonksiyonudur. Ronald Rivest tasarladı ve 1992'de RFC 1321 olarak yayımlandı. Hash fonksiyonları tek yönlü çalışır: girdiden özet kolayca hesaplanır, ama özetten girdiye şifre çözer gibi geri dönülemez. MD5 veriyi şifrelemez ve gizlemez, yalnızca ona bir parmak izi atar.
Bir hash fonksiyonundan üç özellik beklenir. Aynı girdi her zaman aynı özeti verir. Girdinin boyutu ne olursa olsun özet aynı uzunluktadır; MD5 için bu 32 hexadecimal karakterdir. Girdide tek karakterin değişmesi de özeti tamamen değiştirir.
md5("") = d41d8cd98f00b204e9800998ecf8427e
md5("a") = 0cc175b9c0f1b6a831c399e269772661
md5("abc") = 900150983cd24fb0d6963f7d28e17f72
md5("hello") = 5d41402abc4b2a76b9719d911017c592
md5("Hello") = 8b1a9953c4611296a827abf8c47804d7
md5("merhaba") = c39436ee452e641cde2eb992ab397911İlk üç satır RFC 1321'deki standart test vektörlerindendir. "hello" ile "Hello" arasında tek harflik bir büyük-küçük farkı var, yine de iki özet birbirine hiç benzemiyor; buna çığ etkisi denir. Araç algoritmayı dış kütüphane kullanmadan uygular ve metni UTF-8 olarak kodlar. "ş" gibi Türkçe harflerle hesaplanan özet bu yüzden UTF-8 kullanan diğer araçlarla aynı çıkar.
MD5 nasıl hesaplanır ve nasıl çalışır?
Algoritma girdiyi önce sonuna bir 1 biti ve gerekli sıfırlar ekleyerek 512 bitlik (64 baytlık) bloklara tamamlar; son 64 bite orijinal uzunluk yazılır. Sonra dört 32 bitlik durum değişkeni (A, B, C, D) sabit başlangıç değerleriyle başlar ve her blok için 64 turluk bir işlem uygulanır. Her turda bit düzeyinde mantıksal işlemler, blok sözcüklerinden biri, sinüs fonksiyonundan türetilmiş bir sabit ve sola döndürme (rotasyon) kullanılır. Tüm bloklar işlendikten sonra dört değişken birleşir ve 128 bitlik özet çıkar. Bu işlemleri elle yapmak pratik olmadığı için hesap her zaman bir araçla yapılır.
MD5 aracını nasıl kullanırım?
Aracı kullanmak üç adımdan oluşur. Önce "Metin" alanına özetini almak istediğin metni yaz; boş metnin de bir MD5 özeti vardır. Ardından "Çıktı bicimi" listesinden küçük harf (a-f) ya da BÜYÜK HARF (A-F) seç. Son olarak "MD5 özeti" satırındaki 32 haneli değeri kopyala ve karşılaştırmak istediğin değerle yan yana koy. Küçük ve büyük harf yalnızca gösterim farkıdır; ikisi aynı değeri ifade eder.
Dosya yerine metin için
Bu araç yazdığın metni özetler, bir dosyanın içeriğini okumaz. Dosyanın MD5 değeri, dosyanın baytlarının özetidir; metin kutusuna dosyanın adını yazmak aynı sonucu vermez. Metinde görünmeyen bir boşluk, satır sonu ya da farklı bir satır sonu biçimi (Windows'un iki karakterlik biçimi gibi) özeti tamamen değiştirir. İki özet beklediğin gibi uyuşmuyorsa önce bu görünmez farklara bak.
MD5 ne işe yarar, nerede kullanılır?
MD5'in bugün makul kullanım alanı bütünlük kontrolüdür. Yayımcının verdiği özet ile kendi hesapladığın özet aynıysa dosya aktarım sırasında bozulmamıştır. Veri tekrarlarını tespit etmek, önbellek anahtarı üretmek ve MD5 gerektiren eski sistemlerle uyumluluk sağlamak diğer yaygın kullanımlardır. Bu işlerde amaç kazara oluşan bozulmayı ya da farkı yakalamaktır; bir saldırganı durdurmak beklenmez.
Aktarım hatalarını bulmak ile kasıtlı değişikliği önlemek ayrı problemlerdir. Bir indirme bağlantısını ele geçiren saldırgan hem dosyayı hem de yanındaki MD5 değerini değiştirebilir; bu durumda özetin eşleşmesi hiçbir şeyi kanıtlamaz. Kötü niyete karşı koruma gerekiyorsa özeti güvenilir ve ayrı bir kanaldan al, dijital imza ya da SHA-256 gibi güçlü bir algoritma tercih et.
MD5 neden güvenli değildir?
MD5'te çakışma saldırıları gösterilmiştir: iki farklı girdinin aynı özeti üretmesini sağlamak günümüz bilgisayarlarında çok kısa sürer. Bir hash fonksiyonunun güvenli sayılması için bu çakışmaların pratikte bulunamaması gerekir; MD5 bu şartı sağlamaz ve kriptografik açıdan kırılmış kabul edilir. Bu yüzden dijital imza, sertifika ve belge doğrulama gibi alanlarda kullanılması uygun değildir.
İkinci sorun ise algoritmanın hızıdır. MD5 çok hızlı hesaplanır; bu bir dosya sağlama aracı için iyi, parola saklamak için kötüdür. Saldırgan saniyede çok sayıda parola adayının özetini hesaplayıp sızan özetlerle karşılaştırabilir. "123456" ya da "password" gibi yaygın parolaların MD5 özetleri de hazır tablolarda bulunur; özet geri çözülemese de bilinen bir parolanın özeti hemen tanınır. MD5 ile saklanan parolalar bu yüzden bir sızıntıda hızla ele geçirilebilir.
Bunun yerine ne kullanılmalı?
Parola saklamak için bcrypt, scrypt ya da Argon2 gibi bilerek yavaş ve tuzlu çalışan parola özetleme yöntemlerini kullan. Genel amaçlı güvenli özetleme ve dosya doğrulaması için SHA-256 ya da daha güçlü SHA ailesi uygundur. Hangi algoritmanın ne için seçileceği konusunda güncel kılavuz ve standartlara başvur. Kendi başına güvenlik algoritması tasarlamaya çalışma.
Görünmeyen karakterler özeti nasıl değiştirir?
Araç metni olduğu gibi alır: başta ya da sonda boşluk varsa silmez, satır sonlarını tek biçime çevirmez, harfleri dönüştürmez. Aşağıdaki değerleri node:crypto modülüyle hesapladım; aracın çıktısıyla aynı olmaları gerekir. Bayt sütunu, metnin UTF-8 kodlamasındaki uzunluğudur.
| Girdi | Bayt | MD5 özeti |
|---|---|---|
| hesapo | 6 | 2b8b711db49b4222402f915646744a54 |
| hesapo + boşluk | 7 | 5c4854c9395955b768af01ce502b36d0 |
| hesapo + satır sonu (LF) | 7 | e2b6cca60c2d1279eb2b5e2e494a7e8f |
| hesapo + Windows satır sonu (CRLF) | 8 | 8e412d0f9f9b177943fe1f55e12b2f0d |
| seker | 5 | 1535250543340a089598371651e88108 |
| şeker | 6 | 8c4ec3e6e270f4c07d84c376d3217afc |
"şeker" 5 harf olduğu halde 6 bayt tutar, çünkü "ş" UTF-8'de 2 bayttır. Bir tuzak daha var: "ş" harfi tek karakter (U+015F) olarak da, "s" ile altına eklenen çengel işaretinin (U+0327) birleşimi olarak da yazılabilir. Ekranda ikisi aynı görünür, ama birincisi 2, ikincisi 3 bayttır ve MD5 özetleri farklıdır (f77d0141628dbee6c01939f685637c85 ile 721530d0f440efb381b86513bb565b50). Araç Unicode normalleştirme yapmaz. Başka bir programdan kopyaladığın Türkçe metin tutmuyorsa sebep bu olabilir.
Kaç blok işlenir?
Dolgu kuralı gereği metnin sonuna en az 1 bayt (0x80) ve 8 baytlık uzunluk alanı eklenir. 55 bayta kadar olan bir metin tek 64 baytlık bloğa sığar; 56 bayttan itibaren ikinci blok gerekir, 120 baytta üçüncüsü başlar. Bu yüzden 56 baytlık bir metnin özeti 55 baytlık olandan iki kat iş ister. Kullanıcı açısından fark hissedilmez. Aracın metin alanı en fazla 100.000 karakter kabul eder.
Aynı özeti bilgisayarında almak
Dosyaların özetini almak için işletim sisteminin kendi komutları yeterli. Linux'ta md5sum dosya.iso, macOS'ta md5 dosya.iso, Windows'ta certutil -hashfile dosya.iso MD5 komutu dosyanın baytlarından özeti hesaplar. Metinle karşılaştırırken dikkat: echo hesapo | md5sum komutu metnin sonuna satır sonu ekler ve e2b6cca60c2d1279eb2b5e2e494a7e8f verir. Bu araçtaki "hesapo" ile aynı sonucu görmek için printf 'hesapo' | md5sum kullan.
RFC 1321'deki test listesinde iki örnek daha var: "message digest" metninin özeti f96b697d7cb7938d525a2f31aaf161d0, küçük harfli İngiliz alfabesinin (abcdefghijklmnopqrstuvwxyz) özeti c3fcd3d76192e4007dfb496cca67e13b. Bir MD5 uygulamasını sınamak istersen bu değerleri kullanabilirsin. Algoritmanın güvenlik durumu da ayrı bir belgede yazılı: 2011'de yayımlanan RFC 6151, MD5'in çakışmaya dayanıklılık gereken yerlerde kullanılmamasını önerir.
MD5 kullanımında sık yapılan hatalar
En yaygın hata MD5'i şifreleme sanmaktır; özet geri çözülemez ama gizlilik de sağlamaz. Parola özeti olarak MD5 kullanmak da sık görülür. Bazıları indirilen dosyanın doğruluğunu aynı sayfadan gelen MD5 ile kanıtlanmış sayar. Görünmeyen boşluklar ve satır sonları yüzünden özet tutmayınca algoritmayı suçlamak bir başka hatadır. Son olarak, gerçek parolalarını çevrimiçi herhangi bir araca yazma; hangi araç olursa olsun bu alışkanlık riskli olabilir.
Sıkça sorulan sorular
MD5 şifre saklamak için güvenli mi?
Hayır. MD5 hızlıdır ve çakışmalara açıktır; parola saklamak için bcrypt, scrypt ya da Argon2 gibi yöntemler kullanılmalıdır.
MD5 özeti geri çözülebilir mi?
Özet matematiksel olarak girdiye geri çevrilmez. Yaygın ve kısa girdiler için hazır özet tabloları ve kaba kuvvet denemeleri kullanılabildiğinden, zayıf bir parolanın özeti pratikte bulunabilir.
MD5 özeti kaç karakterdir?
128 bitlik özet, 32 haneli onaltılık değer olarak yazılır. Girdi bir harf de olsa bir kitap da olsa uzunluk aynıdır.
MD5 ile SHA-256 arasındaki fark nedir?
SHA-256, 256 bitlik daha uzun bir özet üretir ve MD5'ten farklı olarak bilinen ve pratikte uygulanabilen bir çakışma saldırısı yoktur. Güvenlik gerektiren işlerde SHA-256 ve üzeri tercih edilir; MD5 yalnızca eski sistem uyumluluğu ve sağlama için kullanılıyor.
Büyük ve küçük harf özeti değiştirir mi?
Özetin yazımı değişmez; A-F ile a-f aynı onaltılık rakamlardır. Girdi metnindeki büyük-küçük harf farkı ise özeti tamamen değiştirir: "hello" ile "Hello" farklı özet verir.
İlgili araçlar ve kapanış
Güçlü ve rastgele bir parola oluşturmak için şifre üretici aracını, kriptografik olmayan basit rastgele seçimler için rastgele sayı üretecini, metin uzunluğunu ölçmek için kelime sayısı aracını kullanabilirsin. MD5 aracı, iki metnin ya da iki kaynağın aynı olup olmadığını kısa yoldan kontrol etmen için var; güvenlik kararlarında ona dayanma.