Hashlemek, bir metnin bir daha geri döndürülemeyecek bir şekilde şifrelenmesidir şeklinde kısaca anlatabiliriz.
Neden?
Dünyadaki bir çok sistem kullanıcı adı, şifre girişine sahip. Bunlar genel olarak veritabanında saklanır. Eğerki olurda, istenmedik bir kişi veritabanına erişirse, ne olacak ? Bu yüzden kullanıcıların şifrelerini bir daha geri döndürülemeyecek şekilde şifreliyoruz ve o şekilde saklıyoruz. Bu şekilde istenmeyen kişi SQL Injection veya benzeri bir yöntem ile veritabanına eriştiği zaman kimsenin şifresini ele geçirememiş olacak.
Örnekler
Mesela md5 ve sha1 bunlara örnektir. Mesela
12345‘in md5 hashi: 827ccb0eea8a706c4c34a16891f84e7b ve bu md5 hash değeri hiç bir algoritma ile geri 12345’e döndürülemez. Ancak bunları geri döndürmek için bir yöntem var.
md5 ve sha1 gibi verileri geri döndürmek
Bu algoritmalarla hashlenmiş verileri hiç bir şekilde geri döndüremeyiz dedik. Ancak bazı kişiler olabilecek
md5(sha1 vb.)–gerçek veri ikililerini bir veritabanında saklarlar ve siz 827ccb0eea8a706c4c34a16891f84e7b hashinin gerçek halini istediğinizde veritabanından bunu bulur ve size gerçek veriyi verir. Örnek bir site; http://www.md5decrypter.co.uk/ Bu siteye az önce verdiğim hashi girdiğinizde veriyi geri döndürebildiğinizi göreceksiniz. Ancak bu veritabanları tüm verileri saklayamazlar çünkü buna zaman, güç yetmez. Yani siz karmaşık bir veriyi; mesela 12345++?? gibi bir veriyi şifrelediğinizde bunu geri döndüremez. Yani zor şifreler geri döndürülemiyor ama kolay şifreler geri döndürülebiliyor. Demek ki sadece md5 ve sha1 gibi algoritmalar yeterli değilmiş. Gelelim çözüme:
Salt
Salt: rastgele üretilmiş bir metindir. Her bir şifre için rastgele farklı bir salt üretilir. Uygulamasıda şöyledir: password ve salt birleştirilir. Daha sonra ortaya çıkan metin bir hash fonksiyonuna gönderilir (md5, sha1 gibi). Sonra bu ortaya çıkan hashlenmiş veri, salt ile beraber kaydedilir.
Örnek:
Şifre: 12345 Salt: %+%/( Salt+Şifre: 12345%+%/( md5(Salt+Şifre): 0992f3be0d17c06865170f0db26c67a3 Veritabanında Saklama:
Artık elimizdeki md5’le hashlenmiş şifre geri döndürülemez.Giriş Kontrölü
Şimdi herşey daha güvenli ama hiç birşey geri döndürülemez, peki biz nasıl kontrol edeceğiz ? Bir kullanıcının giriş yapmaya çalıştığını varsayalım;
Kullanıcının girdiği email: me@m.com Kullanıcının girdiği şifre: 12345 Şimdi mesela diyoruz ki;
SELECT * FROM user WHERE email = 'me@m.com'
baktık email bizde var, salt ve password’ü alıyoruz, devam ediyoruz.
me@m.com’a ait salt ve password ikilisini aldık. md5(Kullanıcının girdiği şifre + veritabanından gelen salt)
bizim veritabanındaki şifreye eşit mi? diye kontrol ediyoruz. Baktık aynı, yani kullanıcı giriş yapabilir. İşte bu kadar basit bir olay. Bu şekilde artık SQL Injection vb gibi bir yöntemle istenmeyen bir kişi veritabanınızı ele geçirirse kullanıcılarınızın ve kendi şifrelerinizi korumuş olacaksınız.