Çok klasik bir yanlış anlaşılma söz konusu. Bu MD5’i kırıp şifreyi nasıl bulurum? Birkaç kelimelik soruda o kadar çok mantık hatası var ki üstüne yazı yazsak yeridir. Ben de tam olarak bunu yapıyorum. Ancak bu MD5 veya şifrelemeye dair yeterli bir yazı değil. Bana defalarca sorulan bu soruya uzun uzun açıklama yazdığımı fark ettim. En son bloga girip, tekrar sorulduğunda bu linki vermeyi daha mantıklı buldum.
Öncelikle şifre, parola ve şifrelemenin ayrımını iyi yapmamız gerekiyor. Siz mail hesabı oluşturmak istiyorsunuz diyelim. Mail adresinize herkesin erişememesi için yazdığınız gizli bilgi paroladır. Bakın şifre demedim. Diyelim ki 123456789 sizin parolanız.(Umarım parolanız bu değildir.) Siz bunu sisteme girdiğinizde bu bilgi şifrelenerek sisteme kaydolur. Belli bir matematiksel algoritmaya göre şifrelenerek oluşturulan bu anlamsız karakterler dizisi veritabanında size ayrılan köşede parola alanının karşısına yazılır. Bu sayede o veritabanına ulaşan yabancı birisi olursa elinde parolanın kendisi değil anlamsız bir dizi olacaktır. İşte o oluşan diziye biz şifre diyoruz. Bir Çin atasözü der ki(!) : “Senin bildiğin parola, sistemin bildiği şifredir.”
Peki biz neyi kırıyoruz kardeşim? Şifreyi, şifreleme tipinin matematiği neyse ona uygun şekilde geri çeviriyoruz ve nihayetinde parolaya ulaşıyoruz. E tamam, MD5 decode eden siteler de var? Ben o MD5’i alıp ekliyorum bana bazen kırıp(!) veriyor parolayı. Hayır efendim bir şeyi kırmıyor. En azından sizin anladığınız şekilde kırmıyor. MD5 hash değerini eklediğiniz site kendi veritabanı ile kıyaslıyor. Eğer veritabanında bu hash değerinin karşılığındaki anlamlı parolayı bulursa size sunuyor. Bu veritabanı nasıl oluşuyor? MD5 encode/decode siteleri, kendi sisteminde encode edilen bütün metinleri saklıyor. O yüzden kullandığınız önemli parolalarınızı “Ay şu sitede bi encode edeyim bakalım ne çıkacak?” diyerek denemeyin.
MD5 hash değeri geri çevrilemeyecek biçimde tasarlanmıştır. Haliyle teknik bir yolla geri getirmek pek mümkün değil. En azından bilinen bir yolu yok. Siz istediğiniz metni girin. İstediğiniz şeyi MD5 ile encode edin. Ortaya çıkan hash değeri, 32 karakterli olacaktır. Bir iso dosyasının MD5 değeri de, tek kelimelik bir metnin değeri de 32 karakterli olacaktır. Diğer yandan siz bir metine ufacık bir ekleme yapıp tekrar encode ettiğinizde ortaya çıkan MD5 değerleri bambaşka olacaktır.
MD5("Oku baban gibi eşek olma") = d59157e96d2e15e4768a89ffa27e1f4b
MD5("Oku, baban gibi eşek olma") = 63d97ea38b179146594ed325eeb6c8e6
Peki bunu nerede kullanırız? Siz bir dosya indirdiniz. İndirdiğiniz yerde md5 değeri verilir. Diyelim ki bu dosyayı indirdiniz ancak çalışmadı. O durumda indirirken bir bozulma yaşanmış olabilir mi? Elbette olabilir. İşte bu durumda indirdiğiniz dosyanın md5 değerine bakıp, indirdiğiniz yerde verilen değerle kıyaslarsınız. Eğer dosya inerken ufacık bir bozulma dahi yaşanmış ise MD5 değeri bambaşka bir şey çıkacaktır.
Biraz daha kafa karıştıralım mı? Bazen iki farklı şeyi MD5’e göre encode ettiğinizde, MD5 değeri aynı olabilir. Sonuçta 32 karakterli bir değer karşımıza çıkacak ve her şeye yetecek kadar değer yok değil mi?