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 original
function crypt_blowfish($password, $digito = 7) { $set_salt = './1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; for($i = 0; $i < 22; $i++) { } } $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.
Código PHP:
Ver original
$2x$07$I5.7A714FJHKF.I3EA
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 $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>
¿Alguien sabe por qué? No entiendo exactamente como comprobar si la contraseña es igual siendo que está encriptada esa manera tan especial.