¿Es segura mi técnica de hash? [duplicar]

-1

No estoy seguro de si este es el mejor lugar para publicar este tipo de pregunta.

Se me ha ocurrido una función que, creo, es un método muy seguro de hash. (Podría estar completamente equivocado).

Aquí está el código:

function hashPW($password){
    $letters = array('a','b','c','d','e','f','g');
    $numbers = array(1,2,3,4,5,6,7);
    return str_replace($letters,$numbers,md5($password));
}

salidas de "contraseña" como 56443332511765461483274528823699

No estoy muy seguro de que este sea un método seguro. Mi opinión fue que es difícil saber qué números eran en realidad una letra o un número del md5.

Si esta no es una buena opción para usar en mi aplicación web PHP, ¿podría sugerir algo?

Gracias.

    
pregunta ryryan 08.02.2014 - 23:37
fuente

1 respuesta

9

Sobre los principios generales: No haga rodar su propio crypto . Es absolutamente seguro de que te equivocarás.

Estás tomando MD5 y luego aplicando una transformación rápida. Esto hace que su esquema sea peor que el MD5. "Es difícil saber qué número era en realidad una letra o un número", ¿y qué? MD5 no se resquebraja aplicando la transformación inversa: nadie sabe cómo una forma rápida de calcular la transformación inversa. Lo que la gente hace es calcular MD5 (P) para muchos, muchos valores de P (miles de millones y más). Calcular su propia transformación desde MD5 (P) es extremadamente rápido, por lo que su transformación es tan fácil de descifrar como MD5.

Esta es una mala técnica de hash. No ruedes el tuyo. Lea ¿Cómo hash seguro las contraseñas? . Sí, ya sé que es largo. Voy a esperar.

Ahora que entiende que una función de hash de contraseña debe ser lenta y salada, use una estándar. PHP (versiones suficientemente recientes) tiene una función password_hash ; el modo predeterminado usa bcrypt que está bien.

    
respondido por el Gilles 09.02.2014 - 00:18
fuente

Lea otras preguntas en las etiquetas