我正在使用crypt()
函数,但我不知道我的实现是否正确。
如果我写这样的东西,我正在使用什么样的算法:
crypt('PE','12345')
我阅读了文档,但我不知道使用像12345
这样的五个char盐选择了哪种算法。
答案 0 :(得分:1)
这取决于底层系统。我建议您改用 hash() 。例如。
$algos = hash_algos();
if (in_array("sha256", $algos)) {
$str = hash ("sha256", "something" . "salt");
}
通过这种方式,您可以始终如一地使用一种散列算法。
答案 1 :(得分:1)
取决于文档所说的系统。
要确定系统支持的内容,可以检查PHP定义的常量值。常量CRYPT_SALT_LENGTH将显示盐串的预期长度。 DES接受两个字符的盐。 MD5接受12个字符。您还可以检查是否设置了以下任何标志:CRYPT_STD_DES,CRYPT_EXT_DES,CRYPT_MD5,CRYPT_BLOWFISH。为此,请发出如下命令: echo CRYPT_MD5
数字1表示支持; a 0表示不是。
请在此处阅读详细信息http://www.techrepublic.com/article/the-perils-of-using-php-crypt/1058691
答案 2 :(得分:0)
crypt()将使用标准的基于Unix DES的算法或系统上可用的替代算法返回散列字符串。
来自PHP Doc
答案 3 :(得分:0)
crypt()
将使用标准基于Unix DES的算法返回散列字符串(如果它在系统上可用),如果没有,则返回 MD5-基于算法。
您可以从以下列表中设置要使用的算法类型:
这个列表可以像这样使用:
//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";
}
这意味着如果您不想按系统使用默认值,则必须在使用前选择要使用的算法类型。