password - PHP sal y hash SHA256 para contraseña de inicio de sesión
password hash php (5)
De acuerdo con php.net, la opción Salt ha quedado obsoleta a partir de PHP 7.0.0, por lo que debe usar el salt que se genera de forma predeterminada y es mucho más simple.
Ejemplo para almacenar la contraseña:
$hashPassword = password_hash("password", PASSWORD_BCRYPT);
Ejemplo para verificar la contraseña:
$passwordCorrect = password_verify("password", $hashPassword);
He hecho el cifrado de la contraseña en mi script de registro y están almacenados en la base de datos, y tengo que usarlos para iniciar sesión, por lo que me gustaría usar los que no están encriptados para iniciar sesión. He leído algunos de los hilos aquí, pero nada me está ayudando. ¿Cómo puedo agregarlo en mi login.php? La sal también se almacena en la base de datos.
Este es mi script register.php para cifrar
$hash = hash(''sha256'', $password1);
function createSalt()
{
$text = md5(uniqid(rand(), TRUE));
return substr($text, 0, 3);
}
$salt = createSalt();
$password = hash(''sha256'', $salt . $hash);
y este es mi login.php con temporada
//Create query
$qry="SELECT * FROM member WHERE username=''$username'' AND password=''$password''";
$result=mysql_query($qry);
//Check whether the query was successful or not
if($result) {
if(mysql_num_rows($result) > 0) {
//Login Successful
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION[''SESS_MEMBER_ID''] = $member[''id''];
$_SESSION[''SESS_FIRST_NAME''] = $member[''username''];
$_SESSION[''SESS_LAST_NAME''] = $member[''password''];
session_write_close();
header("location: profile.php");
exit();
}
else {
//Login failed
//error message
}
else {
die("Query failed");
}
Estos ejemplos son de php.net. Gracias a ti, también acabo de enterarme de las nuevas funciones de hash php.
Lea la documentación de php para conocer las posibilidades y las mejores prácticas: php.net/manual/en/function.password-hash.php
Guardar un hash de contraseña:
$options = [
''cost'' => 11,
];
// Get the password from post
$passwordFromPost = $_POST[''password''];
$hash = password_hash($passwordFromPost, PASSWORD_BCRYPT, $options);
// Now insert it (with login or whatever) into your database, use mysqli or pdo!
Obtener el hash de contraseña:
// Get the password from the database and compare it to a variable (for example post)
$passwordFromPost = $_POST[''password''];
$hashedPasswordFromDB = ...;
if (password_verify($passwordFromPost, $hashedPasswordFromDB)) {
echo ''Password is valid!'';
} else {
echo ''Invalid password.'';
}
No pudo iniciar sesión porque no obtuvo el texto correcto de solt al iniciar sesión. Hay dos opciones, la primera es definir sal estática, la segunda es si desea crear sal dinámica, entonces tiene que almacenar la sal en algún lugar (medios en la base de datos) con el usuario. Ahora que concatena la cadena de usuario solt + password_hash con esta pregunta de disparo con nombre de usuario en la tabla de la base de datos.
No puedes hacer eso porque no puedes saber la sal en un momento preciso. A continuación, un código que funciona en teoría (no probado para la sintaxis)
<?php
$password1 = $_POST[''password''];
$salt = ''hello_1m_@_SaLT'';
$hashed = hash(''sha256'', $password1 . $salt);
?>
Cuando inserte:
$qry="INSERT INTO member VALUES(''$username'', ''$hashed'')";
Y para recuperar usuario:
$qry="SELECT * FROM member WHERE username=''$username'' AND password=''$hashed''";
array hash_algos(void)
echo hash(''sha384'', ''Message to be hashed''.''salt'');
Aquí hay un enlace para hacer referencia a http://php.net/manual/en/function.hash.php