【发布时间】:2013-03-21 02:59:36
【问题描述】:
所以我在用户注册和登录时使用 md5 对密码进行编码和解码,但是我的数据库中的密码与登录时使用的密码不匹配,即使我知道它们是同一个词:
这是我的数据库中的内容
098f6bcd4621d373cade4e832
这就是在登录屏幕上使用的密码上使用 md5 给我的结果
098f6bcd4621d373cade4e832627b4f6
如您所见,还有 7 个额外的字符,但我不知道为什么它们不一样。这是用于在注册时将用户详细信息插入数据库的脚本
$qry = "INSERT INTO Members(fname, lname, fullname, email, login, passwd, bad_league_id)
VALUES('$fname','$lname',0,'$email', '$login','".md5($_POST['password'])."',0)";
$result = @mysql_query($qry);
这是我的登录表单比较值的方式
$qry="SELECT * FROM Members WHERE login='$login' AND passwd='".md5($_POST['password'])."'";
$result=mysql_query($qry);
另一方面,我目前正在从 mysql 转移到 mysqli,因此请原谅使用 mysql,因为我知道它已被弃用。
【问题讨论】:
-
数据库中密码字段的SQL数据类型是什么?是
VARCHAR (25)吗? -
是的,它是一个 varchar(25),我正在使用排序规则 utf8_unicode_ci。请告诉我这意味着你知道如何解决它:-)
-
该字段有多长?请记住,至少六七年(更长的时间?),md5 对密码来说是不安全的。您应该将
crypt()与 BLOWFISH 一起使用。 -
请停止推出您自己的密码哈希方法。在 PHP 5.5 上使用 native API。或者compatibility library 在 5.3.7+ 上时