openssl_random_pseudo_bytes()很慢(PHP)

时间:2009-12-21 13:44:12

标签: php openssl

我在PHP中使用opennssl_random_pseudo_bytes()并且它的执行速度非常慢。我的应用程序经常超时(抛出执行时间限制错误)。 OpenSSL随机的特殊原因是这么慢吗?我目前在我的开发人员计算机上使用Windows 7 x86。

3 个答案:

答案 0 :(得分:10)

在Windows上,openssl_random_pseudo_bytes()调用OpenSSL的RAND_screen()来生成熵。它非常慢,而且PHP几乎不是第一个遇到这种情况的unix-> windows端口。看起来常见的建议是使用RAND_seed()代替。

值得注意的是,OpenSSL文档指出:

RAND_screen()函数可以方便Windows程序员使用。它将屏幕的当前内容添加到PRNG。对于可以捕获Windows事件的应用程序,通过调用RAND_event()来播种PRNG是一个明显更好的随机源。 **应当指出的是        这两种方法都不能在没有用户交互的情况下运行**。

所以这实际上可能是一个经过验证的错误 - 我已经提出了核心开发人员的问题。直到在Win32上为OpenSSL生成熵的更好的方法变得可用时,似乎简短的答案是“是的,它在Windows上很慢。很抱歉。”

讨论问题的一些其他链接:

Open Bug at rt.openssl.org
curl developers discuss alternative methods of collecting entropy on Win32
Google Groups archive of OpenSSL Users List discussing the slowness of RAND_poll() on Win32
Another discussion on the slowness of RAND_screen() on mail-archive.com's archive of OpenSSL Users

答案 1 :(得分:5)

这显然是PHP中的一个错误< 5.3.4。

  

修复了可能的阻止行为   openssl_random_pseudo_bytes on   视窗。 (皮尔)

http://php.net/ChangeLog-5.php#5.3.4

答案 2 :(得分:2)

这取决于你如何运行PHP。在我的win7-64bit PHP5.3.27

  1. Apache + PHP-CGI =需要600毫秒
  2. Apache + PHP5模块=即时