我想使用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");
答案 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生成密码哈希)。