我一直在四处搜寻,无法找到我认为应该合乎逻辑的答案。我将包括用于在注册时插入的代码部分(以及适当的验证)以及用于希望您有想法的选择部分。在登录时检索盐腌的MD5密码PHP MySql
在注册页面上,我将密码插入随机唯一盐串和用户所需密码的MD5中。 (如果这不足以存储密码,我愿意提供改进的建议)。
$InsertQuery = "INSERT INTO login (firstname, lastname, username, password, salt, activation) VALUES ('$fnamePost', '$lnamePost', '$usernamePost', MD5('$salt$passwordPost'), '$salt','1')";
在登录页上我有以下的代码来检查密码:
$saltQuery = "SELECT * FROM login where username = '$username'";
$saltResult = mysql_query($saltQuery);
$saltArray = mysql_fetch_array($saltResult);
$saltPass = $saltArray['salt'];
$query = "SELECT * FROM login WHERE username = '$username' AND password = MD5('$saltPass$password')";
if($result1 = mysql_query($query)) {
if($success1 = mysql_num_rows($result1) > 0) {
在这个“success1”点,它返回零行意不正确的用户名和密码。
打印查询本身我似乎得到一个MD5(saltpassword)搜索,但这不匹配存储在表中的密码。
我在这里错过了什么?
预先感谢您。
此外,:所以,问题是在注册页面说的密码是什么和登录页面上的选择查询试图匹配。
举例:注册密码:5586ef3ede51ef5b41676801d6870574 - 登录密码:f90dacb09ffd1cbf4bdf13b3175da696
这意味着,加入盐和MD5之间的某个地方,我们正在不同的结果。
如果您可以打印您的show create table登录输出,这将有所帮助。另外,select * from登录输出,至少有一行是可疑的。 – Geremy
MD5不再是一个好主意 – 2014-02-07 02:59:52
@Geremy表\t创建表\t 登录\t CREATE TABLE'login'( 'id' INT(4)NOT NULL AUTO_INCREMENT, 'FirstName'文字NOT NULL, 'LastName'文本NOT NULL, 'username' varchar(32)NOT NULL, 'password' varchar(64)NOT NULL, 'salt' varchar(12)NOT NULL, 'Activation' varchar(40)DEFAULT NULL, PRIMARY KEY ('id'), UNIQUE KEY'username'('username'), UNIQUE KEY' id'('id') )ENGINE = MyISAM AUTO_INCREMENT = 27 DEFAULT CHARSET = latin1 – Dm3k1