我刚开始学习php,并决定让自己接受编码寄存器和登录脚本的挑战.
我不确定如何继续.现在,在你搜索我的代码之前......请不要成为关于sql注入和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);
?>
Run Code Online (Sandbox Code Playgroud)
<?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>
Run Code Online (Sandbox Code Playgroud)
<?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>
Run Code Online (Sandbox Code Playgroud)
真的这个问题可能很简单,但我想我会包含我当前的代码,以便人们可以学到一些东西.
如果盐或其他什么,你如何解密哈希密码.就像我说的那样,我不确定它是如何完成的.
我的数据库信息,如果你在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|
------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
代码也很容易在这里作为pastebin使用:
Connect.php:http://pastebin.com/8ft12kG5
Index.php:http://pastebin.com/TqrJhzdu
login.php:http://pastebin.com/9fR3HJhe
加盐哈希的总体思路是,生成每个用户的盐,将其附加到密码中,并将盐与加盐+哈希密码一起存储在数据库中。
当用户登录时,您会查找其用户名的盐,将其附加到他们输入的密码中,将其散列在一起,并将其与数据库中存储的散列进行比较。
如果您真的坚持为所有用户使用单一盐,您可以将全局盐附加到用户输入的密码中,并将其与您存储的哈希值进行比较。