¿Cómo puedo vender bcrypt en una aplicación PHP (y debería hacerlo)?

Estoy contribuyendo a un proyecto PHP de código abierto relativamente maduro. Recientemente, descubrí que almacena las contraseñas como hashes MD5 simples, lo cual es bastante molesto para mí. Pensé que si iba a arreglarlo, bien podría hacerlo bien (tm), así que quería usar bcrypt.

Primero, lo que he encontrado para otros idiomas:brypt-ruby parece usar el código C original de OpenBSD ojBCryptEl código de Java.Py-bcrypt es una envoltura delgada alrededor del código BSD.BCrypt.net es un puerto directo dejBCrypt.

Ahora, el propio PHP es compatible con bcrypt (aunque, engañosamente llamado simplemente 'blowfish') enla función de la cripta. Sin embargo, las versiones anteriores a 5.3 requieren soporte en el propio sistema, generalmente proporcionado porcrypt_blowfish. phpass es lo mismo y recomienda instalar PHP 5.3 oSuhosin.

Dado que muchos usuarios de la aplicación usan alojamiento compartido estándar, no quiero requerir ninguna configuración especial del servidor. Esperaba robar el código de la versión 5.3 de PHP, pero está en C y (por la pequeña lectura que acabo de hacer) no puedo requerir el uso de una extensión C para los usuarios del proyecto.

Pensé en crear un puerto PHP puro de bcrypt, pero mirandola fuente de jBCrypt, No estoy seguro de que deba hacerlo, dado que no estoy increíblemente familiarizado con PHP o blowfish, y un error aquí podría ser simultáneamente peligroso y difícil de detectar en primer lugar.

Entonces, les presento dos preguntas (multiparte):

¿Mi falta de conocimiento de PHP está obteniendo lo mejor de mí? ¿Realmente puedo usar una de las implementaciones ya creadas?¿Debería crear una función de bucle simple que llamesha1() omd5() repetidamente por un número configurable de veces?

Respuestas a la pregunta(3)

Su respuesta a la pregunta