openssl_random_pseudo_bytes()很慢(PHP)

Tow*_*wer 9 php openssl

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

TML*_*TML 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上很慢.很抱歉."

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

在rt.openssl.org上打开Bug
curl开发人员讨论在Win32上收集熵的替代方法
OpenSSL用户列表的Google Groups存档讨论Win32
上RAND_poll()的缓慢另一个关于在mail-archive.com的存档上RAND_screen()缓慢的讨论OpenSSL用户


Tow*_*wer 5

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

修复了Windows上openssl_random_pseudo_bytes中可能存在的阻塞行为.(皮埃尔)

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