0

通常我们mt_rand用来创建一个随机盐来使用它crypt()。但根据mt_randphp 网站上的手册页“不能用于加密目的 [...] 考虑使用 openssl_random_pseudo_bytes() 代替。” 此外,在cryptphp 网站的手册页上,有人建议使用

mcrypt_create_iv

因此,为了测试它们,我使用了这个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哈希时,它根本不会改变。

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

我是散列和crypt. 我很困惑,我应该实际使用什么?

4

1 回答 1

2

使用openssl_random_pseudo_bytes()是你可以在 php 中做的最好的事情来获取随机字节。我不确定您要对 , 执行什么操作substr(),因为openssl_random_pseudo_bytes()返回字节,而不是偏移量。

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

于 2013-04-18T21:31:45.973 回答