password_hash password online example encrypt desencriptar crypt_sha512 crypt_blowfish php passwords blowfish crypt

online - php encrypt password



Cómo generar automáticamente sal para el método crypt con blowfish (3)

Blowfish sigue siendo aceptable, y se prefiere a los métodos de mezcla rápida.

El objetivo de una sal es evitar ataques de mesa precalculados. Mientras tenga una sal no trivial, como la microtime, ha frustrado cualquier tabla precalculada que no haya usado esa sal exacta.

Acabo de empezar a aprender PHP y quiero crear un sitio web con un inicio de sesión para mi proyecto universitario de último año. He leído que blowfish es el mejor método para hash en varios lugares como aquí: openssl_digest vs hash vs hash_hmac? Diferencia entre SALT y HMAC?

En todas partes que leo sobre el método crypt incluye una cadena como $2y$07$usesomesillystringforsalt$ Mi pregunta principal es: ¿cómo lo genero aleatoriamente? He leído en lugares que las marcas de tiempo y mt_rand () no son seguros.

También he escuchado que AES es la tecnología preferida recientemente, pero por lo que veo, ¡parece bastante complicado de implementar en PHP! ¿Todavía es el blowfish un método aceptable para proteger contraseñas almacenadas?


Para PHP versión 5.3.7 o superior, creo que este es el mejor:

$blowfish_salt = "$2y$10$".bin2hex(openssl_random_pseudo_bytes(22));

Para PHP versión 5.5 o superior, simplemente use la nueva función password_hash() con creación sal automática.


Una sal debe ser única (para cada contraseña) e impredecible . Estos dos criterios son un poco difíciles de cumplir con una computadora determinista, por lo que lo mejor que puede hacer es usar la fuente aleatoria del sistema operativo para generar la sal.

Las mt_rand() tiempo, así como la función mt_rand() , no son ideales, porque se puede argumentar que son predecibles. Al menos un atacante puede reducir (y por lo tanto calcular previamente) las combinaciones posibles durante un cierto período. Si bien esto puede no tener un gran impacto en la práctica, ¿por qué no lo haces lo mejor que puedes?

Desde PHP 5.3 puede usar la función mcrypt_create_iv() forma segura para leer desde la fuente aleatoria, luego deberá codificar la cadena binaria al alfabeto permitido. Esta es una posible implementación .

PHP 5.5 tendrá sus propias funciones password_hash() y password_verify() ready, para simplificar esta tarea. También hay disponible un paquete de compatibilidad para PHP 5.3 / 5.4, descargable en password_compat .