创建哈希并加密/加盐它

时间:2012-12-08 04:24:33

标签: php hash passwords openssl

因此,另一个堆栈溢出用户建议使用以下代码来创建哈希:

$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的另一个函数?安装它是否有意义,如果是,我将如何做到这一点?

2 个答案:

答案 0 :(得分:2)

尝试使用mcrypt_create_iv(18)。虽然它用于生成用于加密的初始化向量,但它默认使用/dev/random来生成随机向量。

编辑:http://php.net/manual/en/function.mcrypt-create-iv.php

答案 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相反,它不会阻止服务器,如果没有足够的委托可用。