Estoy buscando un método hash de contraseña para un nuevo sistema de servidor. Los hashes deben ser generados a partir de código PHP y verificados desde PHP, así como por una serie de aplicaciones en un sistema Linux.
Sé que MD5 simple y salado y SHA-1 no son una buena solución. He oído que sha256crypt y sha512crypt deberían estar bien hoy. Una vez leí que los algoritmos sha2crypt ahora son muy fáciles de crackear, haciéndolos inútiles. A menudo escucho bcrypt recomendado. Pero también ha habido múltiples problemas con bcrypt por ahora. $ 2 $ ya no parece ser relevante, pero $ 2a $ y $ 2b $ son incompatibles como lo entiendo. Y al menos PHP tiene una comprensión extraña de arreglar cosas al reutilizar el prefijo $ 2a $ para el algoritmo $ 2b $, lo que lo hace incompatible. No sé qué significan $ 2x $ y $ 2y $. PBKDF y scrypt no parecen estar soportados por nada, así que no puedo usarlos.
PHP puede generar hashes bcrypt con la función password_hash
, pero no parece ser capaz de crear hashes sha256crypt o sha512crypt, ni con password_hash
ni crypt
, que decidirá por sí mismo qué algoritmo usar . Quiero especificar el algoritmo porque no todas las aplicaciones admiten ningún algoritmo.
Por ahora, el algoritmo sha512crypt parece más prometedor, considerando primero la compatibilidad y luego la seguridad. (Una cosa súper segura que simplemente no funciona sigue siendo inútil). Pero PHP no puede generar eso. ¿Estoy atascado con crypt()
usando SHA-1 nuevamente? (Eso es lo que hace: $ 1 $)
El sistema operativo es Ubuntu 14.04 y las aplicaciones son exim, dovecot y proftpd por ahora. La versión de PHP es 5.5.9.
Entonces, ¿qué debo hacer? Estoy completamente confundido por todos en este momento.