【问题标题】:PHP MD5 not working correctlyPHP MD5 无法正常工作
【发布时间】: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+ 上时

标签: php md5


【解决方案1】:

默认情况下,MD5() 函数生成的散列长度为 32 个字符。 passwd 列的数据类型目前为VARCHAR (25),这意味着它最多只能存储 25 个字符,比实际值少 7 个字符。

要解决此问题,您需要更改 passwd 列的数据类型,以便能够存储正确的长度,例如VARCHAR (32).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 2021-08-16
    • 2012-10-28
    • 2013-10-13
    • 2012-12-06
    相关资源
    最近更新 更多