PHP crypt函数和算法

时间:2013-01-09 11:27:15

标签: php algorithm encryption crypt

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

crypt('PE','12345') 

我阅读了文档,但我不知道使用像12345这样的五个char盐选择了哪种算法。

4 个答案:

答案 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-基于算法。 您可以从以下列表中设置要使用的算法类型:

  1. CRYPT_STD_DES。
  2. CRYPT_EXT_DES。
  3. CRYPT_MD5。
  4. crypt_blowfish的。
  5. CRYPT_SHA256。
  6. CRYPT_SHA512。
  7. 这个列表可以像这样使用:

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

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