2012-12-08 105 views
0

所以另一个堆栈溢出用户推荐下面的代码来创建一个散列:创建哈希和加密/腌制它

$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的?安装这个有意义吗?如果是这样,我该怎么做?

回答

2

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

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

+0

感谢您的回答,我会尽力尝试一点,回复您! – radleybobins

+0

@radleybobins是否适合你? –

+0

@Kazi是的!非常感谢你的帮助!进一步挖掘后,它看起来像我的主机使用旧版本的PHP,这意味着我不能使用openssl。 Mcrypt正是我一直在寻找的东西,直到我切换主机! – radleybobins

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读取,这足以让创建密码盐(应该是唯一的和不可预测的)。与缺省值MCRYPT_DEV_RANDOM相比,如果没有足够的可用熵,它不会阻塞服务器。