用php的crypt创建随机盐

时间:2013-04-18 21:23:23

标签: php crypt

通常我们使用mt_rand创建随机盐,以便将其与crypt()一起使用。 但根据php网站上的mt_rand手册页“不用于加密目的[...]考虑使用openssl_random_pseudo_bytes()代替。”此外,在php网站的crypt手册页上,有人建议使用

mcrypt_create_iv

所以,为了测试它们,我拿了this crypt的包装并更改了以下行

$salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", mt_rand(0, 63), 1);

//change it to
$salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", openssl_random_pseudo_bytes(63, $cstrong), 50); 

$salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", mcrypt_create_iv(63, MCRYPT_RAND), 50); 

$salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", mt_srand(), 1);

然后我评论除了一行之外的所有行并开始运行代码,以检查每个函数。我刷新了我的页面,验证工作正常。但是当我运行openssl_random_pseudo_bytesmcrypt_create_iv时,我经常看到相同的哈希值。

$2y$08$$$$$$$$$$$$$$$$$$$$$$.UrC6Lo4LNk8iLmoi25KEoVzHHTK7tNC

我看了上面的哈希10次。

当我使用mt_srand时,哈希根本不会改变。

我在另一个更简单的包装器中测试相同的函数,找到here,它们的行为与我上面描述的相同。

我是哈希和crypt的初学者。我很困惑,我应该用什么?

1 个答案:

答案 0 :(得分:2)

使用openssl_random_pseudo_bytes()是你在php中可以做的最好的随机字节。 我不确定你要对substr()做什么,因为openssl_random_pseudo_bytes()返回字节,而不是偏移量。

为了澄清,您可以单独使用openssl_random_pseudo_bytes(64)来生成64字节的盐。