【发布时间】:2013-04-18 21:23:22
【问题描述】:
通常我们使用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_bytes 或mcrypt_create_iv 时,我经常看到相同的哈希值。
$2y$08$$$$$$$$$$$$$$$$$$$$$$.UrC6Lo4LNk8iLmoi25KEoVzHHTK7tNC
上面的哈希我看了 10 次。
当我使用mt_srand 时,哈希值永远不会改变。
我在另一个更简单的包装器中测试相同的函数,发现 here,它们的行为与我上面描述的相同。
我是散列和crypt 的初学者。我很困惑,我应该实际使用什么?
【问题讨论】: