gpt4 book ai didi

php - 用盐散列密码后如何登录? <==编辑版本 #2 ==>

转载 作者:可可西里 更新时间:2023-11-01 00:11:16 24 4
gpt4 key购买 nike

这是我对此的第二次编辑。几天来我一直在用头撞墙,感觉自己很亲近。我已经尝试了第三个代码块的许多不同版本,但就是无法得到它。知道我做错了什么(它是更改的第三个代码块)

if(!$error) {
$alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxyz1234567890";
$rand = str_shuffle($alpha);
$salt = substr($rand,0,40);
$hashed_password = sha1($salt . $_POST['Password']);
$query = "INSERT INTO `Users` (
`FirstName`,
`LastName`,
`Email`,
`Password`,
`salt`,
`RelationshipToCF`,
`State`,
`Gender`,
`Birthday`,
`Status`
)VALUES(
'" . mysql_real_escape_string($_POST['firstName']) . "',
'" . mysql_real_escape_string($_POST['lastName']) . "',
'" . mysql_real_escape_string($_POST['email']) . "',
'" . $hashed_password . "',
'" . $salt . "',
'" . mysql_real_escape_string($_POST['RelationToCF']) . "',
'" . mysql_real_escape_string($_POST['State']) . "',
'" . mysql_real_escape_string($_POST['sex']) . "',
'" . mysql_real_escape_string($_POST['DateOfBirth_Year'] . "-" . $_POST['DateOfBirth_Month'] . "-" . $_POST['DateOfBirth_Day']) . "',
'pending'
)";
mysql_query($query, $connection);

这是我用来更新现有密码的方法:

$query = "SELECT * FROM `Users`";
$request = mysql_query($query,$connection);
while($result = mysql_fetch_array($request)) {
$alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxyz1234567890";
$rand = str_shuffle($alpha);
$salt = substr($rand,0,40);
$hashed_password = sha1($salt . $result['Password']);
$user = $result['id'];

$query2 = "UPDATE `Users` SET `salt` = '$salt' WHERE `id` = '$user'";
$request2 = mysql_query($query2,$connection) or die(mysql_error());
$query3 = "UPDATE `Users` SET `encrypted_passwords` = '$hashed_password' WHERE `id` = '$user'";
$request3 = mysql_query($query3,$connection) or die(mysql_error());
}

所以现在我想允许用户使用他们注册时使用的密码登录,此时他们只能使用散列密码登录。显然这还没有应用到真实的数据库中。

这是我需要更改的登录页面上的查询:

    if(isset($_POST['subSignIn']) &&
!empty($_POST['email']) &&
!empty($_POST['password'])) {

$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
$query = "SELECT
`id`,`email`,`password` FROM `Users`
WHERE `Email` = '" . $email . "' AND
`Password` = '" . $password . "' &&
`Status` = 'active' LIMIT 1";
$request = mysql_query($query,$connection) or die(mysql_error());

if(@mysql_num_rows($request)) {

$result = mysql_fetch_array($request);
$_SESSION['LIFE']['AUTH'] = true;
$_SESSION['LIFE']['ID'] = $result['id'];

$query = "UPDATE `Users` SET` LastActivity` = '" . date("Y-m-d") ." " . date("g:i:s") . "' WHERE `id` ='" .mysql_real_escape_string($_SESSION['LIFE']['ID']) . "' LIMIT 1";

mysql_query($query,$connection);

if(!empty($_POST['return'])) {
header("Location: " . $_POST['return']);
}else{
header("Location: Dashboard.php?id=" . $_SESSION['LIFE']['ID']);
}
}else{
$_SESSION['LIFE']['AUTH'] = false;
$_SESSION['LIFE']['ID'] = false;
}

我一直在 webernet 上搜索方法,但我想我会利用这里所有伟大的思想并寻找正确方向的建议/方法/教程/点

<==我在最初的 5 个答案后的尝试==>

 i

f(isset($_POST['subSignIn']) && !empty($_POST['email']) && !empty($_POST['password'])) {


$query = "SELECT id FROM cysticUsers WHERE Email = '$email' AND Password = SHA1(CONCAT(salt,'$password')) AND Status = 'active' LIMIT 1";
$request = mysql_query($query,$connection) or die(mysql_error());

if(@mysql_num_rows($request)) {

$row = mysql_fetch_assoc($request);
if (sha1($row['salt'] . $_POST['password']) === $row['password']) {


$_SESSION['CLIFE']['AUTH'] = true;
$_SESSION['CLIFE']['ID'] = $result['id'];

// UPDATE LAST ACTIVITY FOR USER
$query = "UPDATE `cysticUsers` SET `LastActivity` = '" . date("Y-m-d") . " " . date("g:i:s") . "' WHERE `id` = '" . mysql_real_escape_string($_SESSION['CLIFE']['ID']) . "' LIMIT 1";
mysql_query($query,$connection);

if(!empty($_POST['return'])) {
header("Location: " . $_POST['return']);

}else{
header("Location: CysticLife-Dashboard.php?id=" . $_SESSION['CLIFE']['ID']);
}
}

}else{

$_SESSION['CLIFE']['AUTH'] = false;
$_SESSION['CLIFE']['ID'] = false;

}
}

?>

最佳答案

我没有时间浏览整个代码块,但基本的 salt/hash 验证如下:

$user         // User has a $password and a $salt. $password = hash($plaintext . $salt);
$password // Password we are checking.
return $user->password == hash($password . $user->salt);

关于php - 用盐散列密码后如何登录? <==编辑版本 #2 ==>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4785232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com