使用mcrypt获取密码salt。本地Apache服务器上的执行时间很快,但Web主机上的执行时间非常慢

时间:2013-08-14 18:02:05

标签: php security web-hosting salt mcrypt

$salt=bin2hex(mcrypt_create_iv(64, MCRYPT_DEV_RANDOM));

这是我目前创建密码盐的设置。我注意到,当我将注册页面上传到Web主机时,页面执行大约需要1分钟,而在我的本地apache服务器上它是即时的。我把问题缩小到这行代码。您是否了解此函数的任何执行时间问题,或者是否有更好的方法来获取salt字符串(128长度)?

1 个答案:

答案 0 :(得分:2)

问题在于MCRYPT_DEV_RANDOM参数,从中读取将阻止服务器,直到有足够的熵可用。相反,你应该使用:

$binarySalt = mcrypt_create_iv(64, MCRYPT_DEV_URANDOM);

从URANDOM读取是生成盐的最佳选择,它最初从RANDOM中获取,但如果没有足够的熵可以阻止它。这也可以防止有人通过你的功能消耗服务器的熵池。

根据您使用的哈希函数,bin2hex()函数不是最佳的,因为结果字符串的字母表是有限的。您应该允许哈希函数接受的所有字符。

由于PHP现在有自己的api来生成BCrypt哈希值,我建议直接使用这个函数password_hash(),它确实会创建一个安全的盐。早期的PHP版本还有一个兼容包。