Cifrado de contraseñas

De WikiEducator
Saltar a: navegación, buscar


Funciones de cifrado

Icon objectives.jpg

Funciones de cifrado

PHP >= 5.5
 $hashed_password = password_hash("mipassword", PASSWORD_DEFAULT)
 boolean password_verify ( string $password , string $hash )

Todos

 // 2a es el selector del algoritmo bcrypt algoritmo (ver http://php.net/crypt)
 // 12 es el factor de carga de trabajo (unos 300ms en un Core i7), ver http://php.net/crypt
 $salt = bin2hex(openssl_random_pseudo_bytes(22));
 $hash = crypt($_POST['password'], "$2a$12$".$salt);
 // Save the hash but no need to save the salt
 if (crypt($_POST['password'], $hash) == $hash) {
     // Verified
 }
 


Tutoriales


Cifrado de contraseñas

<?php
$username = $_POST["username"];
$password = $_POST["password"];
 
// conexión a la base de datos
// ...
 
// limpieza de los inputs
// ...
 
// crear hash de la password
$password = hash("sha256", $password);
 
 
// guardar valores en la base de datos
$sql = "INSERT INTO users (username, password) VALUES (:username, :password)";
 
$stmt = $db->prepare($sql);
 
$stmt->execute(array(
    ":username" => $username,
    ":password" => $password
));

con salt

<?php
define("MAX_LENGTH", 6);
 
function generateHashWithSalt($password) {
    $intermediateSalt = md5(uniqid(rand(), true));
    $salt = substr($intermediateSalt, 0, MAX_LENGTH);
    return hash("sha256", $password . $salt);
}

Uso de Bcrypt

<?php
function generateHash($password) {
    if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
        $salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
        return crypt($password, $salt);
    }
}

Autentificar usuarios

<?php
function verificar($password, $hashedPassword) {
    return crypt($password, $hashedPassword) == $hashedPassword;
}


Práctica de registro de usuarios



Práctica. Adaptación de un registro de usuarios

Icon activity.jpg

Práctica. Adaptación de un registro de usuarios

Echa un vistazo a http://www.php-login.net/

  1. Crea una app de prueba que use el login-advanced (https://github.com/panique/php-login-advanced) Tutorial: http://www.dev-metal.com/install-php-login-nets-2-advanced-login-script-ubuntu/
  2. Adapta el sistema de login de https://github.com/panique/php-login-minimal a tu agenda con PDO y sqlite