因此,另一个堆栈溢出用户建议使用以下代码来创建哈希:
$password = 'my password';
$salt = strtr(base64_encode(openssl_random_pseudo_bytes(18)), '+', '.');
$pwhash = crypt($password, sprintf('$2y$%02d$%s', 13, $salt));
如果我没有安装openssl,是否还有openssl_random_pseudo_bytes的另一个函数?安装它是否有意义,如果是,我将如何做到这一点?
答案 0 :(得分:2)
尝试使用mcrypt_create_iv(18)
。虽然它用于生成用于加密的初始化向量,但它默认使用/dev/random
来生成随机向量。
答案 1 :(得分:0)
PHP 5.5将拥有自己的函数password_hash()
和password_verify()
来创建BCrypt哈希值(这是你的函数所做的)。 PHP 5.3 / 5.4有compatibility pack可用,可以单个php文件password.php的形式下载。
这是一个做得很好的实现,它使用mcrypt_create_iv,但有一个回退到openssl_random_pseudo_bytes。
mcrypt_create_iv($raw_length, MCRYPT_DEV_URANDOM);
请注意,mcrypt_create_iv函数从MCRYPT_DEV_URANDOM
读取,这足以创建密码盐(salt应该是唯一且不可预测的)。与默认值MCRYPT_DEV_RANDOM相反,它不会阻止服务器,如果没有足够的委托可用。