Вставить зашифрованный пароль в PHP в mysql
я сделал регистрационную форму, и я хочу, чтобы пароль хранился в зашифрованном виде в mysql, мое сомнение в том, нужно ли мне конкретное поле bd для хранения пароля? Мой код для шифрования pass это:
<?php
$usuario = $_POST['nombre'];
$pass = $_POST['pass'];
if (isset($usuario) && isset($pass)) {
if (strlen($pass)>= 8) {
//ciframos la contraseña
$secreto = "Hecho por Rafael Aybar Segura";
$passcif = hash_hmac('sha1',$pass,$secreto);
//conectamos a la bd (las contraseñas son de prueba, hay que sustituirlas por otras más seguras)
$conexion = mysqli_connect("localhost","root","") or
die("conexión errónea");
mysqli_select_db ($conexion, "mantis")
or die ("no se puede seleccionar la BD" );
}
//realizamos la consulta para registrar al usuario
else {
die("La contraseña ha de ser de 8 caracteres o más");
}
}
else {
die("Debes introducir todos los campos");
}
?>
2 answers
Доброе утро!
Нет, вам не нужно специальное поле. Это может быть просто поле типа varchar, где вы будете хранить результат хэш-функции.
Я делаю вам просто уточняющий комментарий: то, что вы делаете с помощью SHA1, является хэшем пароля, а не его шифрованием. То, что вы делаете, идеально, учитывая, что хэш-функция не обратима. То есть ключ, введенный пользователем, не может быть выведен из результата хэш-функция.
Надеюсь, я помог!
В дополнение к остальным комментариям. Если вы используете версию PHP выше 5.5, вы должны использовать функцию password_hash(http://php.net/manual/en/function.password-hash.php) вместо функции hash_mac, указывающей алгоритм для использования.
Кроме того, алгоритм SHA1 не рекомендуется. Вы можете получить "легко" пароли, зашифрованные с помощью.
И в этом случае вы должны создать поле не менее 60 символов и, возможно, 255.
, Если вы делаете это так ваш код для генерации ключей будет выглядеть так:
$passcif = password_hash($pass, \PASSWORD_DEFAULT);
Надеюсь, это поможет вам