Php ile veri tabanı kullanıcı sistemi yaptığınızda kullanıcı güvenliğini sağlamak sebebiyle kullanıcıların oluşturmuş olduğu şifreleri md5(); kodu ile veritabanı şifre sütunumuza kaydederiz. Kullanıcı kaydolurken girdiği şifre md5 ile veri tabanına kaydolurken, giriş yaparken de girilen şifre için md5 dönüşümü yapılır ve bu dönüşümün daha önce oluşturmuş olduğu veri tabanındaki şifre sütununda bulunan md5 dönüşümü yapılmış içerikle eşleşip eşleşmediğine bakılır, eşleşiyorsa kullanıcı için oturum başlatılır Örnek kullanımlara bakalım:
// Girilen şifre eren123 olsun $sifre = "eren123"; $md5 = md5($sifre); // md5 dönüşümü md5 değişkenine aktarıldı echo $md5; // Çıktı: 291b74dec227f7ba5d04a1db8e99588b olacaktır.
Bu sistemle girmiş olduğunuz şifreler md5 olarak veritabanına kaydolur. Peki şifreyi doğrudan kaydetmek ve eşleştirmek mümkün değil mi? Elbette mümkün. Bu sebeple güvenmediğiniz sitelere daha önce kullanmış olduğunuz yani farklı hesaplarda email şifreleriniz gibi kullandığınız şifrelerle girmemelisiniz.
Kendi Şifrelemenizi Yapın
İleri düzey bir şifreleme içinse kendi şifrelemenizi oluşturmanız gerekir. Bu konuyla ilgili kendi kullandığım ve büyük scriptlerin kullandığı yolları anlatmak istiyorum.
Vbulletin scriptinin kullanmış olduğu şifreleme şu şekilde: Kullanıcı üye olurken şifresini girer ve bu şifre md5 ile kodlanır. Ardından bu üye için rastgele 3 karakter oluşturur. Bu üç karakteri kodlanan md5 şifrenin sonuna ekler ve bu şifreyi tekrardan md5 ile kodlar. Php kodlarına bakalım:
$salt = "7[a"; $sifre = "eren123"; $md5 = md5($sifre); // Çıktı 291b74dec227f7ba5d04a1db8e99588b $sonsifre = md5($md5.$salt); // md5(291b74dec227f7ba5d04a1db8e99588b7[a) olacaktır // Çıktı: 5de22e58c40786b8be380cb66436dc8b
Bu şifreleme vbulletin forum sistemini yazan ekibin tercih ettiği bir şifreleme. Açıkçası bu şifrelemeyle seneler öncesinde vbulletin 3.8.x lisansı aldığım zamanlarda karşılaşmıştım. Çok mantıklı gelmişti ve kendi yazdığım scriptlerde bunu kullanmaya başlamıştım. Daha fazla neler yapabilirsiniz, daha özgün şifreleme nasıl yaparsınız birlikte bakalım.
Şifreleme Örnekleri
Üye olan kullanıcının adı ve oluşturduğu şifre ile birlikte md5 şifreleme oluşturabilirsiniz. Ancak buradaki problem de şu ki: Eğer sisteminizde kullanıcı adı değiştirme kullanacaksanız ya da duruma göre bir kullanıcının adını değiştirecekseniz şifreyi yeniden md5’lemeniz gerekecektir. Girilen bir değeri md5 ile şifreleyebiliyoruz ama unutmayın ki elimizde bulunan md5 şifresiyle girilen değeri elde edemiyoruz. Bu noktada değiştirmiş olduğunuz kullanıcı adı ile yeniden md5 kodlamanız için mevcut şifreyi de bilmeniz gerekir. Yaptığım son scriptimde kullandığım başka bir yol ise şöyle: Girilen abcd gibi bir şifreyi ab ve cd olarak ikiye bölüp ayrı şekilde md5 kullanıp, ardından yan yana koyup tekrar md5’leyebilirsiniz.
Bu bahsettiklerimde dikkat edilmesi gereken en önemli şey: veri tabanında kaydolan ve giriş yapılırken girilen şifrelerin eşleşme aşamasının doğru olması gerekir.
Girilen şifre 123456
Şifre | 123456 |
1. Kısım | 123 |
2. Kısım | 456 |
md5(md5(1. Kısım).md5(2. Kısım)); Bu çıktıyı veri tabanına kaydetmiş olalım. Aynı çıktıyı giriş yaparken de almamız gerekir.
Şifreleri ayırırken php substr gibi elementler kullanarak ikiye bölebilirsiniz. Mesela şifre için girilmesi gereken minimum karakteriniz 8 ise ilk 4 karakteri almanız hiçbir şekilde sıkıntı oluşturmayacaktır.