2012-04-12 25 views
7

¿Cuál es la mejor alternativa al algoritmo Md5 para PHP para cifrar datos de usuario como contraseñas y otros datos seguros, almacenados en bases de datos MySQL?Md5 ¿Alternativa en PHP?

+1

md5 hackeado, use sha1 –

+1

whirlpool funciona bien. Deberías decir lo que estás haciendo con eso. – Brad

+3

Depende de para qué lo va a usar. Para cosas hash para buscar duplicados, ¡MD5 es excelente! –

Respuesta

13

SHA512 no es una opción terrible. Pero no pasará mucho tiempo antes de que se resquebraje para la mayoría de las contraseñas. Tome Jeff's Advice. Use bcrypt o PBKDF2. Son resistentes a EC2 u otras técnicas de procesamiento paralelo. Probablemente no sea inmune, pero resistente.

La razón por la cual un mejor hash no es mejor en este caso es ABC en MD5 se convierte en un valor y ABC en SHA512 se convierte en un valor. El cálculo de todas las contraseñas de 3 letras es actually easier for SHA512 than it was for MD5. La clave es ser duro de hacer. Eso significa un hash lento, uno que usa mucha RAM, y/o uno que no se puede hacer fácilmente en EC2.

La mejor opción es NO usar contraseñas solo nunca más. Decida si el inicio de sesión realmente es necesario para su sitio, y si lo es, intente utilizar primero un proveedor de terceros. Si esa no es una opción, considere una contraseña + token de RSA. Solo use una contraseña sola si no tiene otras opciones viables.

Al enviar una contraseña, la clave es hash (contraseña + sal) y la sal debe ser única por usuario, y también debe ser difícil o imposible de adivinar. El uso del nombre de usuario cumple los primeros criterios y es mejor que no tener sal o la misma sal para cada usuario, , pero una sal aleatoria única para cada usuario es una mejor opción.Lo ideal sería una base de datos separada, si no la ubicación, con sus propias credenciales. También debe tener una clave no en el nombre de usuario, sino en el user_id o incluso un hash del user_id. Desea que la base de datos sea a prueba de inyección SQL. Aceptar una entrada del usuario que no es hash es una buena manera de hacerlo. Y sería inteligente dejar que la consulta en sí hiciera el hash. ¿Lento? Sí, y eso también es algo bueno.

La sal en sí debe contener todos los datos difíciles de predecir que puede obtener. Nombre de usuario + ID de usuario + Marca de tiempo + basura de dev/urandom + el último tweet con la palabra taco en él. Más tiempo, mejor. SHA512 es una buena elección de hash aquí.

Resumen: hash = bcrypt (contraseña + sal), salt = sha512 (username + user_id + timestamp + microtimestamp + bits dev/urandom + otro ruido).

Si todavía está preocupado después de todo eso. Siéntase libre de SHA512 la contraseña cifrada. Ganarás la fuerza de SHA512, que cuando se agrieta solo revela una fuerza mucho más dura a la fuerza bruta hash cifrada.

0

MCrypt proporciona muchos métodos más seguros (así como también md5, por cierto).

+0

Sí, pero no analiza cuáles son más seguros y por qué. – DampeS8N

-1

Recomiendo que lea sobre la función hash. También puede leer sobre Mcrypt. Esta es la mejor cosa hash por ahora, supongo. Mcrypt proporciona hash basado en el ciclo de la CPU.

1

Puede usar hash de esta manera, tiene muchos algoritmos para copiar sus datos.

hash('sha256', $data); 
3

MD5 ya no se recomienda. La mayoría de las instalaciones de php incluyen la extensión hash. La mejor opción para una función hash sería SHA-512. Puede utilizar SHA-512 con la siguiente función:

<?php 
    function sha512($string) { 
     return hash('sha512', $string); 
    } 
?> 

Hay otras alternativas con tamaños más pequeños de salida si lo desea, como SHA-256 o RIPEMD-160.

Actualización: Al leer su pregunta actualizada, sugiero la función php crypt.

+0

Falso. sha384 es más seguro: http://en.wikipedia.org/wiki/SHA_hash_functions –

+1

Más seguro que 'SHA-256', sí. Más seguro que 'SHA-512', no. ¿Dónde leíste esto? –

8

Pruebe el hash de funciones PHP() http://php.net/manual/en/book.hash.php

código Ejemplo:

$hash = hash('SHA512', $pass); 

Esto convierte a esta:

SHA512("The quick brown fox jumps over the lazy dog") 

En:

0x07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 

Más información:http://en.wikipedia.org/wiki/SHA-2

+0

[SHA512 no es una mala elección, pero no es la mejor opción.] (Http://www.codinghorror.com/blog/2012/04/speed-hashing.html) – DampeS8N

+0

Tengo que estar en desacuerdo. – CodeTalk

+6

¿Presta atención para demostrar por qué no está de acuerdo? – DampeS8N