В 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