1

我想在登录时使用 MD5 对数据库中的注册密码进行哈希处理,但问题是在注册过程中密码被哈希处理但在登录时系统工作,因为这是不正确的密码

注册.php

 //ADD MD5 hash to the password 
       $db_pass=md5($pass1);
//************Insert all the user's input to the database**************************//
$query = mysql_query("INSERT INTO user(user_name, first_name, last_name, governorate,
 district, village, birth_date, email_address, specialization, password, 
 registered_date)VALUES('$username', '$firstname', '$lastname', '$governorate',
 '$district', '$village', '$bdate', '$email', '$specialization', '$db_pass', 
 now())") or die("could not insert data");  

登录.php

$pass = md5($pass);

$sql=mysql_query( "SELECT user_id, email_address, first_name, user_name FROM user 
WHERE email_address='$email'
AND password='$pass'LIMIT 1") or die("error in user table");
4

2 回答 2

1

您不应该使用 MD5。它是不安全的,而且对于您将其用于密码散列的目的来说太快了(如果您不明白为什么使用快速密码散列算法是一个坏主意,请查看 Wiki 页面以了解暴力攻击) . 您应该考虑使用Bcrypt 之类的东西。

您可以通过crypt 函数使用 Bcrypt 。

$userPassword = 'testpassword';
$hashed = crypt($userPassword, '$2a$15$usesomesillystringforsalt$');
echo $hashed;

正如上面有人提到的,ircmaxell在 github 上有一个非常好的库。该库与 password_hash 函数向前兼容,该函数将在 PHP 5.5 中提供(目前为 BETA)。

于 2013-05-11T09:34:40.327 回答
0

你确定 $pass1 和 $pass 是一样的!!只需检查一下,在散列之前两者都是相同的。

由于 MD5 不安全,请使用带盐的 sha256/sha512 或使用phpass生成强哈希(WordPress 使用 phpass 生成密码哈希)。

于 2013-05-11T09:45:48.000 回答