【发布时间】:2012-07-05 14:23:14
【问题描述】:
好的,所以下面的所有代码都不是我自己的。我一直在关注互联网上的教程,但是当我尝试运行它时,似乎没有密码匹配。我相信加盐密码可能会出错,因为数据库中的内容与 login.php 脚本中描述的 64 个字符相去甚远。我不知道。代码如下:
register.php
// Create a 256 bit (64 characters) long random salt
// Let's add 'something random' and the username
// to the salt as well for added security
$salt = hash('sha256', uniqid(mt_rand(), true) . 'something random' . strtolower($username));
// Prefix the password with the salt
$hash = $salt . $password;
// Hash the salted password a bunch of times
for ( $i = 0; $i < 100000; $i ++ )
{
$hash = hash('sha256', $hash);
}
// Prefix the hash with the salt so we can find it back later
$hash = $salt . $hash;
// carry on with registration code...
登录.php
$email = $_POST['email'];
$password = $_POST['password'];
$con = mysql_connect("localhost", "redacted", "redacted", "redacted");
$sql = '
SELECT
`password`
FROM `users`
WHERE `email` = "' . mysql_real_escape_string($email) . '"
LIMIT 1
;';
$r = mysql_fetch_assoc(mysql_query($sql));
// The first 64 characters of the hash is the salt
$salt = substr($r['password'], 0, 64);
$hash = $salt . $password;
// Hash the password as we did before
for ( $i = 0; $i < 100000; $i ++ )
{
$hash = hash('sha256', $hash);
}
$hash = $salt . $hash;
if ( $hash == $r['password'] )
{
session_start();
header('Location: /quiz/index.php');
}
if( $hash != $r['password'] ){
session_start();
header('Location: /?error=4');
}
// end login script
【问题讨论】:
-
哪个教程? PHP 在网络上有大量糟糕的教程。这似乎是其中之一。
-
一个常见的错误是数据库字段不够长,无法存储所有字符。
-
啊……这就是原因。我的密码字段只有 30 个字符。干杯@Konerak :-)
-
@Konerak 完成!再次欢呼。 :-)
标签: php mysql hash passwords salt