【发布时间】:2015-03-16 14:50:35
【问题描述】:
我正在使用 mysql 数据库为我的网站创建登录系统。
当用户注册时,它将密码保存到数据库中:
$password = hash("sha512","somesalt".$password."moresalt");
然后当我登录时,我使用相同的哈希函数将输入的密码与数据库中的密码进行比较。
为了比较我使用的数据库:
$query = mysql_query("select * from users where password='$password' AND email='$email'", $connection);
$rows = mysql_num_rows($query);
if ($rows == 1) {//do login stuff}
但行总是返回 0。当我从注册和登录中删除哈希函数时,它可以正常登录。怎么了?
作为一个旁注,以防有人想知道,我会使用 mysqli,但我的虚拟主机的数据库版本是旧的。我相信他们使用的是 5.2。
我忘了提到我确实检查了数据库是否与这些图片中看到的内容匹配(无法嵌入图片所以链接):
https://drive.google.com/file/d/0B_u6weYp5wTCQng5eVhTSkZFRDg/view?usp=sharing https://drive.google.com/file/d/0B_u6weYp5wTCQVRXTkNqdzhWUFE/view?usp=sharing
【问题讨论】:
-
您是否将哈希视为纯文本并检查它是否确实存在于数据库中?这将告诉您查询是否错误或该行是否不存在于第一个位置。
-
基本调试:自己选择行,对比db和s中的hash您计算的哈希值。我敢打赌他们是不同的,这就是为什么您的查询没有返回任何行 - 没有匹配的记录。
-
password列的长度是多少?它可能太短并削减了哈希值。但是,这些信息太少,无法为您提供适当的帮助。至少将登录脚本添加到您的原始问题中
标签: php mysql hash passwords password-encryption