openssl_random_pseudo_bytes () медленно (PHP) - PullRequest
9 голосов
/ 21 декабря 2009

Я использую opennssl_random_pseudo_bytes () в PHP, и он работает очень медленно. У моего приложения часто тайм-ауты (выдает ошибку времени выполнения). Есть ли какая-то особая причина для того, чтобы OpenSSL random был таким медленным? Я сейчас использую Windows 7 x86 на своем компьютере разработчика.

Ответы [ 3 ]

10 голосов
/ 10 ноября 2010

В Windows openssl_random_pseudo_bytes () вызывает метод RAND_screen () OpenSSL для генерации энтропии. Это довольно медленно, и PHP едва ли является первым портом unix-> windows, который столкнулся с этим. Похоже, что общий совет - использовать RAND_seed ().

Также интересно отметить, что документация OpenSSL гласит:

Функция RAND_screen () доступна для удобства программистов Windows. Добавляет текущее содержимое экрана в PRNG. Для приложений, которые могут перехватывать события Windows, заполнение PRNG с помощью вызова RAND_event () является значительно лучшим источником случайности. **Следует отметить, что оба метода нельзя использовать на серверах, которые работают без взаимодействия с пользователем **.

Так что это может быть сертифицированная ошибка - я уже поднял проблему с основными разработчиками. До тех пор, пока не станет доступен лучший метод генерации энтропии для OpenSSL на Win32, краткий ответ: «Да, это медленно в Windows. Извините за это».

Некоторые дополнительные ссылки, обсуждающие проблему:

Открытая ошибка на rt.openssl.org
Разработчики curl обсуждают альтернативные методы сбора энтропии на Win32
Архив групп Google из списка пользователей OpenSSL, в котором обсуждается медлительность RAND_poll () в Win32
Другое обсуждение медлительности RAND_screen () в mail-archive.com архиве пользователей OpenSSL

5 голосов
/ 15 января 2011

Это, видимо, ошибка в PHP <5.3.4. </p>

Исправлено возможное поведение блокировки в openssl_random_pseudo_bytes on Окна. (Pierre)

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

2 голосов
/ 17 января 2014

Это зависит от того, как вы запускаете PHP. На моем win7-64bit PHP5.3.27

  1. Apache + PHP-CGI = Требуется 600 мс
  2. Модуль Apache + PHP5 = Это мгновенно
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...