Estoy usando opennssl_random_pseudo_bytes() en PHP y está funcionando muy lentamente. Mi aplicación a menudo expira (arroja ese error de límite de tiempo de ejecución). ¿Hay alguna razón particular para que OpenSSL al azar sea tan lento? Estoy usando Windows 7 x86 actualmente en mi máquina de desarrollador.openssl_random_pseudo_bytes() es lento (PHP)
Respuesta
Esto era al parecer un fallo en PHP 5.3.4 <.
Corregido el comportamiento de bloqueo posible en openssl_random_pseudo_bytes en de Windows. (Pierre)
Causa problemas en la producción de mi servidor de Windows 2008, pero no tengo ningún problema en mi propia computadora con Windows XP. Ambas máquinas ejecutan PHP 5.3.1 – neobie
@neobie: como se dice que tiene un "comportamiento de bloqueo ** ** posible", es posible que simplemente no aparezca en XP, pero ¿lo has probado con una versión? > = 5.3.4 todavía? – Levit
Esto parece estar mal. Lea aquí: https://bugs.php.net/bug.php?id=51636 – mgutt
En Windows, openssl_random_pseudo_bytes() llama a RAND_screen() de OpenSSL para generar entropía. Es bastante lento, y PHP no es el primer puerto de Windows que se ha topado con esto. Parece que el consejo más común es usar RAND_seed() en su lugar.
También es interesante notar que la documentación de OpenSSL afirma:
La función RAND_screen() está disponible para la comodidad de los programadores de Windows. Agrega el contenido actual de la pantalla al PRNG. Para aplicaciones que pueden atrapar eventos de Windows, sembrar el PRNG llamando a RAND_event() es una fuente significativamente mejor de aleatoriedad. ** Debe tenerse en cuenta que ambos métodos no se pueden usar en servidores que se ejecutan sin la interacción del usuario **.
Esto puede ser un error certificado. Ya he planteado el problema con los desarrolladores de núcleo. Hasta que esté disponible un mejor método para generar entropía para OpenSSL en Win32, parece que la respuesta breve es "Sí, es lenta en Windows. Lo siento".
Algunos enlaces adicionales que tratan sobre el problema:
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
Depende de cómo ejecutar PHP. En mi PHP5.3.27 win7-64bit
- Apache + PHP-CGI = Toma 600ms
- módulo de Apache + PHP5 = Es instantánea
"Es instantáneo": como punto de referencia aproximado en mi módulo Win7-64bit PHP5.5 (i7 3.5GHz) puedo llamar 'opennssl_random_pseudo_bytes (16) '1 millón de veces en 1.55 (+0.02) segundos. (Me puse un poco nervioso después de ver varias publicaciones, aunque más antiguas, sobre "rendimiento lento"). – MrWhite
- 1. reemplazar rand() con openssl_random_pseudo_bytes()
- 2. PHP: scandir() es demasiado lento
- 3. CURL con PHP - Muy lento
- 4. MySQL registro de consultas lento - ¿qué tan lento es lento?
- 5. Fatal error: Llamada a openssl_random_pseudo_bytes función no definida()
- 6. gevent urllib es lento
- 7. WebClient es muy lento
- 8. django es muy lento
- 9. Doxygen es lento
- 10. GetHostEntry es muy lento
- 11. eglSwapBuffers es errático/lento
- 12. GLES20Canvas.nDrawDisplayList es lento
- 13. php retraso lento cuando inicie sesión
- 14. php de repente muy, muy, muy lento
- 15. ¡El lote de JDBC es LENTO! Quiero decir, ¿REALMENTE LENTO?
- 16. Consultas SQL: ¿qué tan lento es demasiado lento?
- 17. ¿Es realmente lento este WebClient.DownloadFileAsync?
- 18. mb_str_replace() ... es lento. alguna alternativa?
- 19. ¿Por qué es lento LockCanvas()?
- 20. Qué tan lento es Reflection
- 21. ¿Es más lento que elsif?
- 22. localhost es lento a veces
- 23. std deque es sorprendentemente lento
- 24. ¿El monodroid es más lento?
- 25. ¿Por qué Function.prototype.bind es lento?
- 26. ¿File_get_contents es más lento que include?
- 27. .Net TableLayoutPanel - Borrar controles es muy lento
- 28. ¿Por qué Dictionary.First() es tan lento?
- 29. ¿Por qué mi depurador es tan lento?
- 30. Plataforma de Firma es lento en android
¿Cómo lo estás usando? –
Con solo llamarlo openssl_random_pseudo_bytes (8); y funciona muy lentamente. – Tower
¿Lo has probado con una cadena más larga, digamos 'openssl_random_pseudo_bytes (512)'? –