1

我基本上使用这个:

$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./';
$numChars = strlen($chars);
$salt = '$2a$12$';

for($i = 0; $i < 22; ++$i) {
    $salt .= $chars[mt_rand(0, $numChars - 1)];
}

可以用那个吗?

4

4 回答 4

1

对于 PHP 5.3.7 或更高版本,我相信这是最好的:

$blowfish_salt = "$2y$10$".bin2hex(openssl_random_pseudo_bytes(22));

对于 PHP 5.5 或更高版本,只需使用带有自动盐创建的新password_hash() 功能。

于 2013-07-22T19:06:29.980 回答
0

这很好用。不过,您在随机化盐方面工作得太辛苦了。
你总是可以做一些像这样 $salt = md5(mt_rand()) :)
当你想在下一步保存密码时使用这样的东西。

    $encryptedPassword = crypt($userPassword, $salt);

如果您有最新版本的 PHP,这应该默认为河豚

于 2012-08-18T03:56:40.157 回答
0

我不知道它是否可以使用,但由于mt_rand它是基于系统时间的,所以它是可以预测的。最好使用高级随机生成算法openssl_random_pseudo_bytes/dev/random实用程序(如果可用)。

请参阅:https ://stackoverflow.com/a/6337021/454533

于 2012-08-18T04:11:06.303 回答
0

使用 Blowfish,您只需要 21 个字符作为盐,其余的都被遗忘了。

这部分$2a$12$不是算法和成本(哈希迭代)的盐。

您的盐可以通过 sha1 简单地制作,然后返回前 21 个字符:

$salt = substr(sha1($_SERVER['HTTP_HOST'].uniqid().microtime(true)),0,21);

所以像:

$algo = '$2a$12$'; //Keep this safe

//store along side hash as the salt, for future compares
$salt = substr(sha1($_SERVER['HTTP_HOST'].uniqid().microtime(true)),0,21);

$hash = crypt('The string to be hashed', $algo.$salt.'$');
于 2012-08-18T04:13:19.727 回答