使用md5散列密码

时间:2013-05-11 09:26:36

标签: php mysql logging

我想使用MD5在数据库中散列注册密码,登录时也是如此,但问题是在注册过程中密码被哈希但在登录时系统正常工作,因为这是不正确的密码

register.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");  

的login.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");

2 个答案:

答案 0 :(得分:1)

您不应该使用MD5。这是不安全的,你使用它来进行密码散列的速度太快了(如果你不明白为什么使用快速密码散列算法是一个坏主意,请查看Brute-force attacks的Wiki页面)。你应该考虑使用像Bcrypt这样的东西。

您可以通过crypt function使用Bcrypt。

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

正如上面提到的那样,ircmaxell在github上有一个pretty good library。该库与password_hash函数向前兼容,该函数将在PHP 5.5中提供(目前在BETA中)。

答案 1 :(得分:0)

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

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