crypt():未指定 salt 参数。您必须使用随机生成的 salt 和强哈希函数来生成安全的哈希函数

crypt():未指定 salt 参数。您必须使用随机生成的 salt 和强哈希函数来生成安全的哈希函数

我收到以下密码错误。我有 PHP 7.2 版本(对于 php 版本 5.5,我没有出现此问题),以下代码:

function make_key($length)
{
    $valid_chars = 'abcdefghijkilmnoprstwxyzABCDEFGHIJKMNOPRSTWXYZIL0123456789';
    $random_string = "";
    $num_valid_chars = strlen($valid_chars);
    for ($i = 0; $i < $length; $i++)
    {
        $random_pick = mt_rand(1, $num_valid_chars);
        $random_char = $valid_chars[$random_pick-1];
        $random_string .= $random_char;
    }
    return $random_string;
}

/**
 * Generate random coupon code
 * @param int $length
 * @return string
 */
function generate_code($length=6)
{
    // Generate array range
    $range = array_merge(range('A', 'Z'), range(0, 9));

    $keyCount = count($range) - 1;
    $code = '';
    for ($i = 0; $i < $length; $i++) {
        $rand = mt_rand(0, $keyCount);
        $code .= $range[$rand];
    }
    return $code;
}

/**
 * Generates a random SHA-256 salt ($5$)
 * @return string
 */
function generate_salt() {
    return '$5$'.substr(crypt(uniqid()), 3, 13);
}

我发现:return '$5$'.substr(crypt(unigid()), 3, 13); ,你能帮我如何加强这段代码,这样我就不会再遇到问题了吗?谢谢

答案1

salt 参数是可选的。但是,crypt() 在没有 salt 的情况下会创建一个弱哈希,并且会引发 E_NOTICE 错误。请确保指定足够强的 salt 以获得更好的安全性。

function generate_salt($len = 8) {
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()-=_+';
$l = strlen($chars) - 1;
$str = '';
for ($i = 0; $i<$len; ++$i) {
    $str .= $chars[rand(0, $l)];
}
return $str;

}

$generate_salt = generate_salt($len = 8); $str = "$5$" . $generate_salt . "$"; $c = crypt(uniqid(), $str); echo $c; // $5$ot6wbbf+$wtwWCC8wmE01cNeHGGLMGqkWqiDWyHWfdXQvEOLI7.5

这是为加密函数生成盐的正确方法。

答案2

我建议您使用/或移至/密码哈希()密码验证()功能。

墓穴不是二进制安全的..

相关内容