İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

PHP'de "Password Hashing" İşlevleri Nedir? Nasıl Kullanılır?

saintx

1
İyinet Üyesi
Katılım
26 Ağustos 2012
Mesajlar
12
Reaction score
0
Konum
Akhisar
Merhaba,

Bugün size PHP'de Password Hashing işlevlerinden bahsedeceğim.

Password Hashing nedir?
- Şifre üretmeye yarayan bir işlevdir. Bu işlevler ile şifreler oluşturabilir, şifrelerin doğruluğunu kontrol edebiliriz.

Password Hashing fonksiyonları nelerdir?
- Password Hashing işlevlerinde; password_ hash, password_ get_ info, password_ verify, password_ needs_ rehash

Password Hashing fonksiyonları nasıl kullanılır?
- password_hash fonksiyonunun alabileceği değerler şöyledir;
-> password (İşlevde kullanılacak olan şifre),
-> algo (İşlevide kullanılacak olan algoritma),
-> options (İşlevde kullanılacak olan ekstra ayarlar)

Örnek 1 (password_hash);
PHP:
<?php
	# En basit haliyle işlevin kullanımı
	echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";
?>

Yukarıdaki örneğin çıktısı;
Kod:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Örnek 2 (password_hash);
PHP:
<?php
	# İşlevin CPU'da ne kadar harcayabileceğini belirtiyoruz
	# Not; cost değeri 4'den küçük 31'den büyük olamaz.
	$options = [
		'cost' => 12
	];
	# İşlevi çalıştırıyoruz
	echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>

Yukarıdaki örneğin çıktısı;
Kod:
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

Örnek 3 (password_hash);
PHP:
<?php
	# İşlevin CPU'da ne kadar harcayabileceğini belirtiyoruz
	# İşlevin salt değerini rastgele bir şekilde oluşturuyoruz
	# Not; cost değeri 4'den küçük 31'den büyük olamaz.
	# Uyarı; salt değeri statik girmeniz önerilmez, rastgele değer alması daha iyidir.
	$options = [
		'cost' => 12,
		'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)
	];
	# İşlevi çalıştırıyoruz
	echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>

Yukarıdaki örneğin çıktısı;
Kod:
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.

- password_get_info fonksiyonunun alabileceği değerler şöyledir;
-> password (İşlevin oluşturduğu hash değeri),

Örnek 1 (password_get_info);
PHP:
<?php
	# İşlevin oluşturduğu hash değeri hakkında bize bilgi verir.
	print_r(password_get_info('$2y$12$Gp0AmzuPibCtSZ2aPV2Yk.kA/cX/iP3XQWj2qMFHL0S8jMSPCi4oO'));
?>

Yukarıdaki örneğin çıktısı;
Kod:
Array
(
    [algo] => 1
    [algoName] => bcrypt
    [options] => Array
        (
            [cost] => 12
        )

)

- password_verify fonksiyonunun alabileceği değerler şöyledir;
-> password (İşlevin oluşturma esnasında kullandığı şifre),
-> hash (İşlevin oluşturduğu hash değeri)

Örnek 1 (password_verify);
PHP:
<?php
	# İşlevin oluşturduğu hash değeri ile girilen şifreyi karşılaştırır.
	# Eğer eşleştirme doğru sonuçlanırsa true yanlış sonuçlanırsa false döndürür.
	var_dump(password_verify('http://www.r10.net/', '$2y$12$Gp0AmzuPibCtSZ2aPV2Yk.kA/cX/iP3XQWj2qMFHL0S8jMSPCi4oO'));
?>

Yukarıdaki örneğin çıktısı;
Kod:
bool(true)

- password_needs_rehash fonksiyonunun alabileceği değerler şöyledir;
-> hash (İşlevin oluşturduğu hash değeri),
-> algo (İşlevde kullanılmış olan algoritma),
-> options (İşlevde kullanılmış olan ekstra ayarlar)

Örnek 1 (password_needs_rehash);
PHP:
<?php
	/*
	   password_needs_rehash işlevi oluşturulan hash değerin
	   yeniden oluşturulup oluşturulmamasını bize belirtir.
	   
	   Eğer yeniden oluşturulması gerekiyorsa true gerekmiyorsa
	   false değerlerini döndürür.
	*/
	
	# İşlevde kullanılacak olan şifre
	$password = 'http://www.r10.net/';
	# İşlevde kullanılacak olan ekstra ayarlar
	$options = [
		'cost' => 12,
		'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)
	];
	# Hash değerimizi üretiyoruz
	$password_hash = password_hash($password, PASSWORD_DEFAULT, $options);
	# Hash değerimizin yeniden oluşturulmaya gerek duyup duymadığını öğreniyoruz
	$needs_rehash = password_needs_rehash($password_hash, PASSWORD_DEFAULT, $options);
	# Eğer yeniden oluşturulması gerekip gerekmediğini ekrana yazdırıyoruz
	if($needs_rehash == true) {
		echo 'Hash değeri yeniden oluşturulması gerekmiyor.';
	} else {
		echo 'Hash değeri yeniden oluşturulması gerekiyor.';
	}
?>

Yukarıdaki örneğin çıktısı;
Kod:
Hash değeri yeniden oluşturulması gerekiyor.

Password Hashing işlevleri PHP'nin kaçıncı sürümde dahil edildi?
- Password Hashing işevleri PHP 5.5 sürümünde dahil edildi.

Password Hashing işlevlerini PHP 5.5 sürümünden önceki sürümlerde kullanabilir miyim ?
- Evet, password_compact paketi ile bu fonksiyonları PHP 5.5 sürümünden önceki sürümlerde kullanabilirsiniz.

Bir sonraki konumda görüşmek üzere sağlıcakla kalın. Bu arada konuyu okudaktan sonra bi' teşekkürü çok görmezsiniz umarım :)
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Üst