[Php-avanzado] Problema con passwords
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Jue Sep 9 18:55:54 ART 2010
Hola Juan Pablo,
me parece que no te quedó claro el uso de la "sal". Fijate que en el
ejemplo del manual dice:
<?php
$password = crypt('mypassword'); // let the salt be automatically
generated
/* You should pass the entire results of crypt() as the salt for
comparing a
password, to avoid problems when different hashing algorithms are
used. (As
it says above, standard DES-based password hashing uses a 2-character
salt,
but MD5-based hashing uses 12.) */
if (crypt($user_input, $password) == $password) {
echo "Password verified!";
}
?>
Es decir, se genera una clave cifrada con la "sal" aleatoria, y para la
verificación se usa la misma clave cifrada como "sal".
Con esto se consigue que la clave solo se pueda volver a cifrar para
obtener claves cifrada idénticas usando la clave ya cifrada.
http://ar2.php.net/manual/en/function.crypt.php
También fijate que podés usar otros algoritmos de cifrado para obtener
claves más largas.
El jue, 09-09-2010 a las 14:15 -0300, Juan Pablo escribió:
> Hola.
> Les aclaro mi problema:
>
> Tengo un sistema de usuarios q encripta la contraseña con la función
> crypt(string $str [, string $salt ] )
>
> Acá hice un script de prueba para probar todas las posibilidades.
>
> $password = crypt("ASDASDASD10","mardelmusic"); // let the salt be
> automatically generated
> $usuario="ASDASDASD100";
>
> if (crypt($usuario,"mardelmusic") == $password) {
> echo "Password verified!:<br>$password <br>".crypt($usuario,
> $password);
> }else{echo"Password falsa:<br>$password <br>".crypt($usuario,
> $password);}
>
>
> Esto da verdadero. A pesar de que la contraseña q el usuario puso
> tenga un cero demás. Y cuando imprime las contraseñas, ambas
> coinciden. O sea q genera la misma contraseña con un 0 más... o varios
> (tambien probe con muchos y pasa lo mismo)
>
> Entonces lo q decidí es sacarle la semilla.
> En la prueba paso todo bien, pero cuando voy a mi script, falla,
> aunque las pass coincidan:
>
> $pass_db=$data["usuario_pass"]; //De la base de datos, que el usuario
> cargo cuando se registro. $usuario_pass=$_POST["pass"];
>
> f(crypt($usuario_pass,$pass_db) != $pass_db){
> ERROR!
> }else{
> BIEN!
> }
>
> Lo más comico de todo, es que en el error pongo imprimir ambas
> contraseñas (base de datos y la encriptada del post) y son las dos
> iguales, pero son de la siguiente estructura:
>
> $1$eM2.Pk3.$pDsUodej3nwxAkOVVQ0M21
>
> Entonces no se si el error lo ocasionan los $ $ o . . no se...
>
> Gracias y nos vemos el miercoles!
Nos vemos!
--
Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
Más información sobre la lista de distribución Php-avanzado