我使用sha1来保护我的密码.我在register.php中以这种方式存储了密码
// secure password
$salt = openssl_random_pseudo_bytes(20);
$secured_password = sha1($password . $salt);
//Send it to mysql table
$result = $access->registerUser($username, $secured_password, $salt, $email, $fullname);
Run Code Online (Sandbox Code Playgroud)
这一切都很好.
问题在这里:
在我的login.php中
$password = htmlentities($_POST["password"]);
$secure_password = $user["password"];
$salt = $user["salt"];
// 4.2 Check if entered passwords match with password from database
if ($secure_password == sha1($password . $salt)) {
//do something
} else {
//do something
}
Run Code Online (Sandbox Code Playgroud)
我总是得到密码不匹配.我哪里错了?
小智 6
首先是第一个.切勿使用SHA或MCRYPT存储您的密码.
编辑:该password_hash()
函数生成一个长密码哈希,所以请确保您的mysql中的列是VARCHAR
500空间
所有这些无用的实践是几乎许多网站被黑客攻击的根本原因.为了解决这个问题,php做了很多研究,然后最后得到了最安全的函数叫做password_hash()
.我不再在password_hash()
这里解释,因为互联网上已有很多文件.
你总是可以像这样哈希密码
<?php
$securePassword = password_hash($_POST['password'], PASSWORD_DEFAULT);
$query = $db->query('INSERT INTO users ......');
?>
Run Code Online (Sandbox Code Playgroud)
而且,要验证密码,您只需使用此功能即可
<?php
$passwordHash = $query['password']; //Password from database
$userPassword = $_POST['password']; //Password from form
if(password_verify($userPassword, $passwordHash)) {
echo 'Password is correct, logged in!';
} else {
echo 'Password is wrong, try again';
}
?>
Run Code Online (Sandbox Code Playgroud)
并回答你的问题.
请不要使用SHA或MCRYPT或BCRYPT.如果你想让你的网站无法访问,那就继续吧.或使用password_hash()
你每次都没有得到哈希处理的原因,因为每次都会openssl_random_pseudo_bytes()
产生随机数.因此,每次执行期间,函数都会返回不同的数字,并且您的sha
结果会出错,从而发出FALSE
警报.
请再说一遍.我鼓励你使用password_hash()
功能
有关更多信息,password_hash()
与password_verify()
:
归档时间: |
|
查看次数: |
2117 次 |
最近记录: |