我在PHP中使用opennssl_random_pseudo_bytes()并且它的执行速度非常慢。我的应用程序经常超时(抛出执行时间限制错误)。 OpenSSL随机的特殊原因是这么慢吗?我目前在我的开发人员计算机上使用Windows 7 x86。
答案 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 视窗。 (皮尔)
答案 2 :(得分:2)
这取决于你如何运行PHP。在我的win7-64bit PHP5.3.27