PHP İle Güçlü Şifreleme

October 8, 2009 in Makaleler, PHP by kivanc.ciftci

Veritabanında sakladığımız şifreleri genellikle md5 algoritması ile şifreleyip öyle saklarız. md5 geri çözülemeyen bir şifreleme yöntemidir ama son zamanlarda artık md5 şifreler bile kırılabilmektedir.
İlk yazımda size bahsetmek istediğim kırılamıyacak şifreler üretmek için alternatif bir yöntem. Bunun için PHP dilinde bir fonksiyon ile örnek vereceğim.
Bu şifreleme yönteminde kullanmak için elimizde rastgele 64 karakterden oluşan bir string olmalı. Bunun için şurdan yararlanabilirsiniz. Öncelikle şifrelemek istediğimiz stringi alıp karakterlere ayırıyoruz. Ardından her bir karakteri daha önceden oluşturmuş olduğumuz stringe dahil ederek birleştiriyoruz. Tabi birleştirmeden önce her bir karakteri md5 metodundan geçiriyoruz. Sonuçta elimizde girilen şifreninde karakter sayısına bağlı olarak çok uzun bir string olacaktır. Bunu son koz md5 metodundan geçirip 32 karakterlik bir katara indirgiyoruz. İşte elimizde geri çözülmesi pek mümkün olmayan bir hash değeri elde etmiş oluyoruz. Aşağıdaki PHP metodu bu anlatılan işi yapmaktadır.

/*
* Bu metod verilen bir stringi sifreleyip bir hash degeri dondurur.
*
* @param $password
*/
function strongEncode($password) {
	$salt = '3C305A3C1ED1B8D01C9CCC0F024B2B81B53CC28F356022E841CD08286C8C8E1A'; 

	// PHP5 kullaniyorsak
	if (function_exists('str_split')) {
		$pass = str_split($password);
	} else { // PHP4 kullaniyorsak
		$pass = array();
		if (is_string($password)) {
			for ($i = 0; $i < strlen($password); $i++) {
				array_push($pass, $password[$i]);
			}
		}
	}

	// Her bir karakteri sifreleyip $salt ile birleştirelim
	foreach ($pass as $hashpass) {
		$salt .= md5($hashpass);
	}

	// Son olarak md5 ile sifreleyip dondurelim
	return md5($salt);
}