Hola de nuevo
Estuve leyendo el manual sobre encriptación [para contraseñas] de PHP, y entonces me topé con que MD5 y SHA1 no son seguras (algo sospechaba), así que me decanté por usar
crypt()
He seguido
este tutorial y al final he conseguido... algo, digamos.
Os explico más detalladamente:
Cuando un usuario se registra, se produce esto:
Código PHP:
Ver originalfunction crypt_blowfish($password, $digito = 7) {
$set_salt = './1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$salt = sprintf('$2x$%02d$', $digito); for($i = 0; $i < 22; $i++)
{
$salt .= $set_salt[mt_rand(0, 22)]; }
return crypt($password, $salt); }
$password_cifrada = crypt_blowfish('$password');
// Inserta los datos en la base
$stm = $connection->prepare("INSERT INTO usuarios (email,password,fecha_registro,activation_key,validated,ip_registro) " . "VALUES ( ? , ? , ? , '$random_key' , 0, '$ip' )");
$stm->bind_param("sss",$email,$password_cifrada,$fecha);
Ok, funciona bien, en la base de datos se me crea una contraseña cifrada.
El problema viene cuando, al hacer login, debo comprobar que la contraseña ingresada es igual a la contraseña en la base de datos.
Obviamente no puedo crear una encriptación con esa contraseña ingresada y comparar el resultado con la que hay en la DB porque incluye un Salt absolutamente único.
Entonces, he probado a hacer lo siguiente en el login...
Código PHP:
Ver original//Toma los datos del form de login
$email = $_POST["user"];
$pass = $_POST["pass"];
//Donde $pass es lo que se ha ingresado en el form y $password es el nombre de la tabla en la DB
$encript = crypt($pass, $password);
$consulta = "SELECT * FROM usuarios WHERE email = '$email' AND password = '$encript' ";
Y entonces intento pasar los datos del resultado por PHP ECHO a un texto.
Código PHP:
Ver original$email = $datos['email'];
$password = $datos['password'];
Código HTML:
<p>EMAIL: <?php echo $email ?></p>
<p>PASSWORD: <?php echo $password ?></p>
Pero no, no me muestra nada.
¿Alguien sabe por qué?
No entiendo exactamente como comprobar si la contraseña es igual siendo que está encriptada esa manera tan especial.