我創建一個登錄系統在PHP中,我遇到哈希。PHP crypt()函數VS.哈希()函數
有人可以告訴我爲什麼如果我使用hash()與sha512它生成一個128字符的字符串,而使用crypt()與sha512它只有118個字符(但只有103個字符的散列)?
實施例:
$password = "password";
$hashed = crypt($password, '$6$rounds=5000$'.core::genSalt().'$');
$hashed2 = hash('sha512', $password);
echo "pwd hashed with hash() -> $hashed<br>";
echo "hashed pwd length? ".strlen($hashed);
echo "<br>-----<br>";
echo "pwd hashed with crypt() -> $hashed2<br>";
echo "hashed pwd length? ".strlen($hashed2);
並且它導致:
pwd hashed with crypt() -> $6$rounds=5000$HGWYWN+gVBLsotI5$sxqlewzU4pn4Z0/.5DlX6orE9Mw2W0Z7VJ6Qp8cCQdDqGvCJHqgiG6fYQjI2dSm78ErfXQ8QbMjq1JCVl2Hah0
hashed pwd length? 118
pwd hashed with hash() -> b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86
hashed pwd length? 128
謝謝
[password_hash](http://docs.php.net/manual/en/function.password-hash.php)比兩者更好,它產生在它自己的 –
散列函數鹽AREN沒有加密功能。它們不是爲了扭轉這一過程而設計的。另外:你的回聲是相反的。第一行('$ hashed'的回聲)來自'crypt()'而$ $ hashed2'來自'hash()' – ccKep
@Arian是的,如果OP的PHP是5.5 ---如果不是,那麼使用兼容包(如果PHP <5.5)https://github.com/ircmaxell/password_compat/ –