(PHP) doğru crypt uygulamak için nasıl ()

1 Cevap php

Burada PHP manual page for crypt() ikinci örneğidir:

<?php
$password = crypt('mypassword'); // let the salt be automatically generated

/* You should pass the entire results of crypt() as the salt for comparing a
   password, to avoid problems when different hashing algorithms are used. (As
   it says above, standard DES-based password hashing uses a 2-character salt,
   but MD5-based hashing uses 12.) */
if (crypt($user_input, $password) == $password) {
   echo "Password verified!";
}
?>

Bu neden çalışır? I 'mypassword' Ben gerçek yönetici kullanmak istediğiniz şifre götürün. Yani o ilk crypt ve $password eşit ayarlayın. Açıkçası, ben DB olduğunu saklamak gerekir gerekir. Ama sonraki satırlarda bu tuz ve ne ben karşılaştırarak kulüpler hem de olarak kullanılan, ve ben bu eğer crypt($user_input, $password) olasılıkla, $password eşit nasıl olabilir anlamıyorum I $user_input olarak ideal doğru şifre var ama $password karşılaştırılır ile tuzlu ikinci durumda $password. Son satırı olsaydı bence daha mantıklı olur

if (crypt($user_input) == $password) {
   echo "Password verified!";
}

Ne anlama değilim?

1 Cevap

crypt, bir tek-yönlü fonksiyon ve zaten tuz içeren bir dize döndürür. Çıktı /etc/shadow depolanan ne benzer.

Örnek php.net,

<?php
echo 'result: ' . crypt('somepassword');
echo 'result: ' . crypt('somepassword');
echo 'result: ' . crypt('somepassword');
?>

result: $1$K2D8DGwq$b05uO37aMwO4rnDlB9Rsi1
result: $1$aPBvu2y.$213YVEs8/5m.jMCXSScly/
result: $1$dW3Xu2p6$nuCtJe2zzlgBMLxN2oZCx/

Crypt sonucu ile kullanıcı girişi karşılaştırırken, fonksiyon otomatik dizeden tuz ayıklar.