Md5 salt password php

Sé que hay muchas preguntas sobre este tema, pero realmente necesito preguntar esto.

Hoy he estado trabajando en el cifrado de contraseñas con md5.

Entonces lo que hice fue.

Tengo 4 sales. (cambian según los valores del usuario)

  1. desde id de correo electrónico y substr luego md5 ellos
  2. desde el correo electrónico y el id substr otras posiciones
  3. una cadena larga, substr y luego md5
  4. otra cadena larga, substr it y luego md5

Luego md5 salt1 y 3 y la contraseña con sal 2 y salt4

Después de esto, tengo que cambiar la contraseña automáticamente cada vez que un usuario cambia su correo electrónico o su identificación para cambiarse.

Que pensais sobre esto?

Nada.

MD5 está roto y mal.

Usar el mailaddress como sal es una buena idea. Pero usar md5 no lo es. Use en su lugar bcrypt, scrypt o pbkdf2.

No invente su propio ecryption, a menos que realmente sepa lo que está haciendo, y créame, no lo hace

Primero, definamos algunos términos.

  • El cifrado es cuando codifica un mensaje para que no se pueda leer. La encriptación implica un texto plano , un cifrado y una clave . Es como poner un libro (el texto plano) en una habitación cerrada (cifrado), que solo se puede abrir con una herramienta conocida (una tecla). Hay muchos tipos de encriptación, pero esa es una descripción simple. El cifrado es bidireccional, lo que significa que puede codificar y decodificar el mensaje.

  • El hash criptográfico es cuando toma cualquier tipo de datos y genera un valor de tamaño fijo (generalmente llamado hash o un resumen ). Los hash criptográficos son unidireccionales, lo que significa que no puede revertir el proceso.

  • Una sal es una cadena única, o una colección de bits, similar a un nonce (un número único que solo se usa una vez). Las sales solo se usan para que un cracker no pueda procesar una lista de hash. No deben usarse como un secreto (es decir, como una clave criptográfica). La única razón por la que las personas suelen hablar de aleatoriedad en lo que respecta a las sales es porque quieren generar una sal única (si la aleatoriedad no es lo suficientemente buena como para tener sales en colisión, por ejemplo).

De acuerdo, ahora cómo debe hash una contraseña.

Una forma relativamente segura de cifrar una contraseña es simplemente insertar un hash único en una contraseña y luego guardar la sal con la contraseña:

 $pass = 'this is my password'; $salt = uniqid('', true); $hash = sha1($pass . $salt); // INSERT INTO users ('hash', 'salt') VALUES ('$hash', '$salt') WHERE ... 

Esa es una buena forma de hacerlo si su sitio web no recupera ningún dato sensible de sus usuarios.

Si maneja datos confidenciales, o si solo quiere asegurarse de que está haciendo todo lo posible para mantener las cosas seguras, entonces hay una función de PHP que hace el hash por usted. Se llama crypt() (lea la documentación para aprender cómo funciona). Aquí hay un ejemplo de cómo hash una contraseña usando la función:

 $pass = 'this is my password'; $salt = 'unique string'; $hash = crypt($password, '$2y$07$'.$salt.'$'); echo $hash; 

Eso bloqueará de forma segura una contraseña.

Lo que hay que tener en cuenta es que la función crypt() es mucho más segura que cualquier cosa que se te ocurra (a menos que seas un especialista en el área).

En las versiones más nuevas de PHP (5.5.0+) existe una API de hash de contraseñas que simplifica aún más el uso de una contraseña.

También hay varias bibliotecas hash por ahí. PHPass es popular.

Es malo, porque usa MD5.

MD5 es una operación muy rápida. Se puede ejecutar mil millones de veces por segundo en hardware de tarjetas gráficas. Se considera una mala práctica usarlo para cualquier cosa relacionada con la contraseña.

Usa bcrypt. Usa una sal al azar. Utilice la próxima API de PHP para realizar hash, verificar y volver a generar contraseñas. Esto incluye el archivo que implementa para las versiones que comienzan con PHP 5.3.7: https://github.com/ircmaxell/password_compat

Personalmente, no recomiendo la participación de la identificación del usuario y su correo electrónico en el hashing de su contraseña. Puede manejar la contraseña de la siguiente manera:

  • Sal dinámica por usuario basada en una cadena aleatoria generada en el registro del usuario
  • Añada una parte de la sal y añada la otra a la contraseña
  • Doble md5: md5 (md5 ($ contraseña))
  • Etc.

una forma simple sería generar una sal aleatoria para cada usuario y actualizar su contraseña de esta manera

 public function encodePassword( $raw, $salt ) { return hash('sha256', $salt.$raw); } 

Para el hash de alta seguridad, puede consultar este enlace que explica cómo implementar PBKDF2:

http://crackstation.net/hashing-security.htm#phpsourcecode