0

我正在使用crypt()函数,但我不知道我的实现是否正确。如果我写这样的东西,我正在使用什么样的算法:

crypt('PE','12345') 

我阅读了文档,但我不知道选择了哪种算法与12345.

4

4 回答 4

1

这取决于底层系统。我建议你改用hash()。例如。

$algos = hash_algos();
if (in_array("sha256", $algos)) {
    $str = hash ("sha256", "something" . "salt");
}

这样,您可以始终使用一种散列算法。

于 2013-01-09T11:32:02.920 回答
1

如文档所述,取决于系统。

要确定您的系统支持什么,您可以检查 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

于 2013-01-09T11:35:05.877 回答
0

crypt()如果系统上可用,将使用基于标准Unix DES 的算法返回散列字符串,如果不可用,则返回基于 MD5 的算法。您可以从以下列表中设置要使用的算法类型:

  1. CRYPT_STD_DES 。
  2. CRYPT_EXT_DES 。
  3. CRYPT_MD5。
  4. CRYPT_BLOWFISH。
  5. CRYPT_SHA256。
  6. CRYPT_SHA512。

这个列表可以这样使用:

//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";
}

这意味着如果您不想使用系统默认值,则必须在使用之前选择要使用的算法类型。

于 2013-01-10T11:11:44.940 回答
0

crypt() 将使用基于标准 Unix DES 的算法或系统上可能可用的替代算法返回一个散列字符串。

来自 PHP 文档

于 2013-01-09T11:29:38.790 回答