创建哈希和加密/腌制它
问题描述:
所以另一个堆栈溢出用户推荐下面的代码来创建一个散列:创建哈希和加密/腌制它
$password = 'my password';
$salt = strtr(base64_encode(openssl_random_pseudo_bytes(18)), '+', '.');
$pwhash = crypt($password, sprintf('$2y$%02d$%s', 13, $salt));
是否有openssl_random_pseudo_bytes另一个函数,如果我没有安装OpenSSL的?安装这个有意义吗?如果是这样,我该怎么做?
答
尝试使用mcrypt_create_iv(18)
。虽然它用于生成加密初始化向量,但默认情况下它使用/dev/random
来生成随机向量。
答
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
读取,这足以让创建密码盐(应该是唯一的和不可预测的)。与缺省值MCRYPT_DEV_RANDOM相比,如果没有足够的可用熵,它不会阻塞服务器。
感谢您的回答,我会尽力尝试一点,回复您! – radleybobins
@radleybobins是否适合你? –
@Kazi是的!非常感谢你的帮助!进一步挖掘后,它看起来像我的主机使用旧版本的PHP,这意味着我不能使用openssl。 Mcrypt正是我一直在寻找的东西,直到我切换主机! – radleybobins