2012-07-09 12 views
6

Duplicar posible:
Secure hash and salt for PHP passwordsUsando MD5 asegurado incluso su más difícil

vi a alguien codificación de un hash de la contraseña de esta manera,

md5(uniqid(mt_rand('password', 15), true)); 

es que una manera segura ¿para hacer esto? ¿Eso incluso funcionó?

+8

¿Cómo verifican la contraseña una vez que ha sido hash?También 'mt_rand' toma ints como sus parámetros, no como cadenas. –

+1

¡Ah, @Rocket qué pregunta ?? !!! – Engineer

+0

Personalmente utilizo [phpass] (http://www.openwall.com/phpass/). –

Respuesta

6

No solo no es seguro, ni siquiera funciona.

mt_rand toma 2 parámetros, un valor mínimo y un valor máximo.

mt_rand('password', 15) 

Esto convierte 'password' a un int (0), a continuación, devuelve un número aleatorio entre 0 y 15.

uniqid(mt_rand('password', 15), true) 

Esto genera entonces un identificador único, y antepone el número aleatorio de la etapa anterior a la misma: el cálculo de algo como esto:

144ffb22886d58e1.82100749 

Esa cadena es entonces md5'd.

Como puede ver, este código es 100% inútil. La contraseña original se convierte a 0 y se pierde para siempre, por lo que lo único que hace es mezclar números aleatorios, lo cual no tiene sentido. Ahora que tiene su hash, no hay forma de verificarlo nuevamente. Dado que la contraseña se convierte, lo que sea que ingrese el usuario no importa.

Así que, no, este código no es seguro, no lo use.

Personalmente, uso el phpass library. Es seguro y simple de usar.

+0

Digamos que si uso sin 'mt_rand()' como este, 'md5 (uniqid ('passwrd', true));' ¿es eso mejor? – itsme

+0

@itsme: El problema con eso es: ¿cómo se verifica la contraseña más adelante? Necesitarás poder generar el mismo hash más tarde, y no puedes hacer eso con 'uniqid'. ['uniqid'] (http://php.net/manual/en/function.uniqid.php) no es para contraseñas, es para generar ID únicos (como UUID). –

+1

¿Por qué un -1? ¿Qué pasa con esta respuesta? –

2

Para ser sincero, ni siquiera usaría md5 como algoritmo hash para almacenar contraseñas. Me gustaría utilizar algo como bcrypt. Además, ni siquiera entiendo cómo funcionaría su ejemplo, pero en cualquier caso si desea protegerlo, manténgase alejado de md5, sha1 como mínimo y aprenda de los errores de los demás y use una sal.

+0

Creo que md5 puede ser seguro si usa una buena sal, pero acepto que los algoritmos más nuevos son el camino a seguir. –

+1

@Rocket Si usa md5() solo para cifrar una contraseña con un salt no es seguro – PeeHaa

+0

MD5 ha sido súper optimizado en términos de rendimiento y, por lo tanto, en algunos casos es factible forzarlo todavía, pero aún no lo haría recomiende MD5 para una implementación segura del hash de contraseñas. – sean

11

No, no es una manera segura. Es inestable y, en su ejemplo, no es repetible. Tendría que almacenar el valor aleatorio largo con el hash mismo. Si la base de datos se ve comprometida, se vuelve extremadamente simple aplicar fuerza bruta al hash.

Debe saber que MD5 y SHA1 son dos de los algoritmos de hashing más débiles, que están disponibles en PHP.

Mucho mejor es usar la función crypt(), con CRYPT_BLOWFISH o PBKDF2.

actualización

Además, como se ha mencionado PeeHaa, no funciona. El mt_rand('password', 15) causará Warning: mt_rand() expects parameter 1 to be long, string given on line X.

+0

@PeeHaa, bueno, sí, porque no es repetible. –