我正在使用crypt()
函數,但我不知道我的實現是否正確。 我使用的是什麼樣的算法,如果我寫成才這樣的:PHP crypt函數和算法
crypt('PE','12345')
我閱讀文檔,我不知道哪個算法選擇與像0五克焦鹽。
我正在使用crypt()
函數,但我不知道我的實現是否正確。 我使用的是什麼樣的算法,如果我寫成才這樣的:PHP crypt函數和算法
crypt('PE','12345')
我閱讀文檔,我不知道哪個算法選擇與像0五克焦鹽。
如文檔所述,取決於系統。
要確定您的系統支持什麼,您可以檢查由PHP定義的常量的值。常量CRYPT_SALT_LENGTH將顯示鹽串的預期長度。 DES接受雙字符鹽。 MD5接受12個字符。您還可以檢查是否設置了以下任何標誌:CRYPT_STD_DES,CRYPT_EXT_DES,CRYPT_MD5,CRYPT_BLOWFISH。爲此,請發出如下命令: echo CRYPT_MD5
數字1表示支持; 0表示它不是。
考慮在這裏http://www.techrepublic.com/article/the-perils-of-using-php-crypt/1058691
crypt()將使用基於標準的基於DES的DES算法或可能在系統上可用的替代算法返回一個散列字符串。
從PHP文件
是的,但顯然它取決於你的參數中給出的鹽。而我的鹽12345不是記錄鹽。 – Pete
這取決於底層系統。我建議你改用hash()。例如。
$algos = hash_algos();
if (in_array("sha256", $algos)) {
$str = hash ("sha256", "something" . "salt");
}
這種方式可以持續使用一種散列算法。
crypt()
閱讀細節將返回使用標準的基於DES-Unix的算法一個散列字符串,如果它是可用的系統上,如果沒有,那麼它將返回基於MD5的algoritm。 ,你可以設置你想從下面的列表中使用何種類型的算法:
和這個名單可以這樣使用:
//setting the value to 1 means enable this algorithm
//which will return true or false.
if (CRYPT_STD_DES == 1) {
echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";
}
if (CRYPT_EXT_DES == 1) {
echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n";
}
if (CRYPT_MD5 == 1) {
echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";
}
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";
}
if (CRYPT_SHA256 == 1) {
echo 'SHA-256: ' . crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . "\n";
}
if (CRYPT_SHA512 == 1) {
echo 'SHA-512: ' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . "\n";
}
,這意味着你必須選擇你想,如果你不想要使用缺省使用前使用什麼類型的算法系統。
請參閱[這裏](http://stackoverflow.com/questions/4447913/php-crypt-function-on-different-os/4447952#4447952) – vanneto
如果這是密碼,節省自己很多麻煩和下載這個lib:https:// github。com/ircmaxell/password_compat – SDC
@SDC這不是目的。我只是想知道PHP使用我的鹽的算法:) – Pete