gpt4 book ai didi

php - 检查用户名/密码是否与用户名/加密密码匹配。漩涡加密和盐

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

我刚刚开始学习 php,并决定让自己迎接编写注册和登录脚本的挑战。

我不确定如何继续。现在,在您搜索我的代码之前...请不要成为那些喋喋不休谈论 sql 注入(inject)和 bobby 表的人。我了解它,但目前没有查看它。

无论如何,我用漩涡和盐加密了密码。目前 salt 是静态的,不确定如何使用 Time() 函数实现一个,并且不会通过在数据库中定位它来破坏目的。我要解决的问题是如何检查用户输入的用户名和密码是否与用户名和HASHED 密码相匹配。

这是我当前的代码,我假设最重要的部分将在 login.php 文件中。

<?php
//connect.php
$connection = mysql_connect("localhost","root","") or die("Couldn't connect to database");
mysql_select_db("test", $connection);
?>

<?php
//index.php
include 'connect.php';
define('salt','7hPqMO(m=F+!!L6(#Yhp-CdF, &Q}+cIrA;c@wcP(E--V<qRmq!v*aSnM;H=4cD0');


if(isset($_POST['username']) && isset($_POST['fullname']) && isset($_POST['email']) && isset($_POST['password'])) {
$username = mysql_real_escape_string($_POST['username']);
$fullname = mysql_real_escape_string($_POST['fullname']);
$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
$encryptedPassword = hash( 'whirlpool',salt.$password );

$sql="INSERT INTO `users` (username, fullname, email, password)
VALUES
('$username', '$fullname','$email','$encryptedPassword')";

if(!mysql_query($sql,$connection)) {
die('Error: ' . mysql_error());
} else {
mysql_close($connection);
header('Location: login.php?redirectedFromRegister=1');
}
}
?>

<html>
<body>
<form action="index.php" method="post">
<h1>REGISTER</h1><hr/>

Email: <input type="text" name="email"/><br/>
Full Name:<input type="text" name="fullname"/><br/>
Username: <input type="text" name="username"/><br/>
Password: <input type="password" name="password"/><br/>

<input type="submit" value="REGISTER"/>
</form>
</body>
</html>

<?php 
//login.php
include 'connect.php';

if(isset($_GET['redirectedFromRegister'])==1) {
echo 'Thank you for registering, you may now login';
} else {
echo '<h1>LOGIN</h1>';
}
?>

<html>
<body>
<form action="index.php" method="post">

Username: <input type="text" name="username"/><br/>
Password: <input type="password" name="password"/><br/>

<input type="submit" value="LOGIN"/>
</form>
</body>
</html>

真的这个问题可能很简单,但我想我会包括我当前的代码,以便人们可以从中学到一些东西。

你如何解密给定盐或其他东西的散列密码。正如我所说,我不确定它是如何完成的。

我的数据库信息,如果你没有在 connect.php 文件中看到它是:

Database : Localhost
Username : Root
Password : ""
Table : users

Table layout :

------------------------------------------------------------------
| Id | Username | Password | Email | Fullname |
------------------------------------------------------------------
| 1 |BobbyTables | HASHED_PASS|email@E.com | Max Mastalerz |
| 2 | SteveJo | HASHED_PASS|steve@jobs.com| Steve Jobs |
| 3 | MarkZuck | HASHES_PASS|MarkZ@fb.com | Mark Zuckerberg|
------------------------------------------------------------------

这些代码也可以很容易地作为一个 pastebin 在这里获得:

连接.php:http://pastebin.com/8ft12kG5

索引.php:http://pastebin.com/TqrJhzdu

登录.php:http://pastebin.com/9fR3HJhe

最佳答案

salted hashes 的一般思想是为每个用户生成一个 salt,将其附加到密码并将 salt 与 salted+hashed 密码一起存储在数据库中。

当用户登录时,您为他们的用户名查找盐,将其附加到他们输入的密码,将其散列在一起并将其与存储在数据库中的散列进行比较。

如果您真的非常坚持为所有用户使用单一盐分,您可以将全局盐分附加到用户输入的密码中,并将其与您存储的哈希值进行比较。

关于php - 检查用户名/密码是否与用户名/加密密码匹配。漩涡加密和盐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22926613/

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