我已经在我的注册脚本中加密了密码并将它们存储在数据库中,我必须使用它们来登录,所以我想使用未加密的登录。我在这里读过一些帖子,但没有什么能帮到我。如何在login.php中添加它?盐也存储在数据库中。
这是我加密的register.php脚本
$hash = hash('sha256', $password1);
function createSalt()
{
$text = md5(uniqid(rand(), TRUE));
return substr($text, 0, 3);
}
$salt = createSalt();
$password = hash('sha256', $salt . $hash);
这是我的季节
的login.php//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");
}
答案 0 :(得分:41)
这些例子来自php.net。多亏了你,我也刚刚了解了新的php散列函数。
阅读php文档,了解可能性和最佳实践: http://www.php.net/manual/en/function.password-hash.php
保存密码哈希:
$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!
获取密码哈希:
// 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.';
}
答案 1 :(得分:3)
根据php.net的说法,从PHP 7.0.0开始,Salt选项已被弃用,所以你应该使用默认生成的盐并且更加简单
存储密码的示例:
$hashPassword = password_hash("password", PASSWORD_BCRYPT);
验证密码的示例:
$passwordCorrect = password_verify("password", $hashPassword);
答案 2 :(得分:0)
您无法登录,因为您在登录时没有获得正确的solt文本。 有两个选项,第一个是定义静态盐,第二个是你想要创建动态盐,而不是你需要将盐存储在某个地方(在数据库中)与用户关联。 你现在用你的数据库表中的用户名解压缩用户solt + password_hash字符串。
答案 3 :(得分:0)
array hash_algos(void)
echo hash('sha384', 'Message to be hashed'.'salt');
的链接
答案 4 :(得分:0)
我认为@ Flo254将$salt
链接到$password1
并将它们存储到$hashed
变量中。 $hashed
变量放在INSERT
的{{1}}查询中。
答案 5 :(得分:-2)
你不能这样做,因为你无法在准确的时间知道盐。下面是一个在理论上工作的代码(未经过语法测试)
<?php
$password1 = $_POST['password'];
$salt = 'hello_1m_@_SaLT';
$hashed = hash('sha256', $password1 . $salt);
?>
插入时:
$qry="INSERT INTO member VALUES('$username', '$hashed')";
用于检索用户:
$qry="SELECT * FROM member WHERE username='$username' AND password='$hashed'";