我一直在嘗試通過mysql數據庫來了解用戶表中存儲的哈希和鹽。我通過存儲他們,但似乎無法包裝我的頭周圍如何驗證用戶登錄時。
我已經瀏覽並看到有關存儲鹽和散列分開和一起。我生產的鹽是隨機的。使用隨機鹽驗證密碼
任何想法?
我發佈了我的代碼。
<?php
$password = 'passwordwhatever';
//generate the salt
function gen_salt() {
$salt = uniqid(mt_rand(), true) . sha1(uniqid(mt_rand(), true));
$salt = crypt('sha512', $salt);
return $salt;
}
//generate the hash
function gen_hash($salt, $password) {
$hash = $salt . $password;
for($i = 0; $i < 100000; $i++) {
$hash = crypt('sha512', $hash);
}
$hash = $salt . $hash;
return $hash;
}
$password = gen_hash(gen_salt(), $password);
echo $password;
?>
儘管如此,鹽的生成可以用一種不那麼矯枉過正的方式來完成;只是一個'uniqid(mt_rand(),true)'就足以達到這個目的,並且在其上添加一個'sha512'不會使它變得更隨機;-) –