我基本上是用这个:
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./'; $numChars = strlen($chars); $salt = '$2a$12$'; for($i = 0; $i < 22; ++$i) { $salt .= $chars[mt_rand(0, $numChars - 1)]; }
可以使用吗?
答案 0 :(得分:1)
对于PHP 5.3.7或更高版本,我相信这是最好的:
$blowfish_salt = "$2y$10$".bin2hex(openssl_random_pseudo_bytes(22));
对于PHP 5.5或更高版本,只需使用新的password_hash()
function创建自动盐。
答案 1 :(得分:0)
这很好用。你工作太辛苦了,你的盐随机化了。
你总是可以像这样做一些阴暗的$ salt = md5(mt_rand()):)
当你想在下一步保存密码时,只需使用类似的东西即可。
$encryptedPassword = crypt($userPassword, $salt);
如果你有最新版本的PHP
,这应该默认为blowfish答案 2 :(得分:0)
我不知道是否可以使用,但由于mt_rand
基于系统时间,因此可以预测。如果它可用,最好使用优秀的随机生成算法,如openssl_random_pseudo_bytes
或/dev/random
实用程序。
答案 3 :(得分: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.'$');