我一直在尋找PHP's crypt function和幾個questions Stackoverflow,我想弄清楚鹽漬和哈希密碼。使用crypt(),我的應用程序如何驗證隨機生成鹽的密碼?
我發現這個PHP社區頁面上:從另一個question
<?php
// Slightly modified example from PHP community page
$password = trim(mysql_prep($_POST['password']));
// Get the hash, letting the salt be automatically generated
$hashed_password = crypt($password);
?>
下面是摘錄:
<?php
function md5crypt($password){
// create a salt that ensures crypt creates an md5 hash
$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
.'abcdefghijklmnopqrstuvwxyz/';
$salt='$1$';
for($i=0; $i<9; $i++){
$salt.=$base64_alphabet[rand(0,63)];
}
// return the crypt md5 password
return crypt($password,$salt.'$');
}
?>
如何類似的東西比較
然而, PHP crypt()函數可以使用 到的各種不同的哈希計算哈希。當你用「$ 1 $」加 鹽時,你會得到一個帶有 MD5的散列。當你用$ 2 $作爲前綴時,你會得到 一個帶有河豚的隱窩,這是更安全的 。
「$ 1 $」加在輸出前面,因此 可以驗證散列。如果它不包含 ,那麼從存儲的散列中就不會知道哪個 算法應該被使用!這個 信息將不得不在其他地方存儲 。爲了節省您的這個麻煩 PHP在散列 輸出中包含算法。
我的頭在旋轉關於散列,加密和鹽有點......但事實真是樹樁我的一部分,我怎麼比較用戶輸入的password
針對salted hashed password
,如果鹽時隨機生成用戶創建......而不是存儲 - 最重要的是,如果你必須指定正確的前綴以便能夠在用戶返回時再次驗證密碼,那麼使用crypt()與自動salt有什麼關係?
請勿使用ASCII鹽。 – SLaks 2011-01-30 23:30:52
請勿使用MD5。 – SLaks 2011-01-30 23:31:13