【问题标题】:Same password but different md5 hash相同的密码但不同的 md5 哈希
【发布时间】:2015-02-25 03:54:12
【问题描述】:

当我通过清除密码检查用户的登录并在字符串上应用 md5() 时,md5 哈希等于存储在 MySQL 数据库中的 md5 哈希(登录成功)。

但我不想在我的 POST 函数中明文传输用户密码,所以我决定使用 cryptoJS 只发送密钥,然后在 PHP 服务器端解密密码。

问题是,当我使用解密后的密码时,md5 是不同的。这很奇怪,因为明文密码字符串与解密密码相同,而 md5 哈希值不同。

通过做:

 var_dump($clearPassword); //Hello.
 var_dump($decryptedPassword); //Hello.

但是:

 var_dump(md5($clearPassword)); //3ea484671d7b00a1df4734ded1aa379c1.
 var_dump(md5($decryptedPassword)); //470a1ad08cbdebe075214591ea20fec9.

如您所见,它是完全相同的字符串,但 md5 哈希值不同,我注意到 var_dump() 作为输出给出:

 string(16) for the $clearPassword;
 string(32) for the $decryptPassword;

我尝试更改字符串编码,但没有成功。任何人都可以向我解释为什么 md5() 的行为与那些相同的密码字符串一样?再次感谢。

【问题讨论】:

  • 你这里是不是少了一个“$”符号var_dump(md5(decryptedPassword))
  • “只发送密钥然后在PHP服务器端解密密码”的意思完全不清楚 - 什么密钥?你用的是什么加密? (MD5 不是加密...)
  • @fpierrat 抱歉,打错字了,我在帖子中修改了,与 $ 无关。
  • 为什么不将密码散列到 md5 客户端,然后再将其传输到服务器?例如使用这样的函数:phpjs.org/functions/md5 所以你不必加密/解密,你可以直接得到你必须与你的基础进行比较的东西(我什至会添加一个盐,这样客户端就不会发送相同的值两次,像这样stackoverflow.com/a/27555577/3872061 - 这是相同的想法,只是使用 sha1 而不是 md5)
  • 使用 CRYPT_BLOWFISH 或 PHP 5.5 的 password_hash() 函数。对于 PHP password_hash() compatibility pack。 MD5 很旧,被认为已损坏。

标签: php encryption mcrypt


【解决方案1】:

解密后的密码与原始密码不同。检查两个字符串的长度,检查编码,做一个字节到字节的比较。 "Hello\0" 和 "Hello\0" 看起来相同,但它们不是。甚至 "Hello\0" 和 "Hello\0\0\0" 也不一样。也许解密算法给出的字符串长度为 32 字节。

【讨论】:

  • 你说的很有意思,实际上我每个字节都做了一个比较,结果完全不同!现在我想知道如何使我的两个字符串(明文密码+解密密码)看起来一样并且具有相同的编码结构?
  • 可能一个字符串是纯 ASCII 字符串(C 字符串),另一个是 utf16 或具有另一种编码模式。 PHP在字符串编码方面非常繁琐,它不会告诉你这么多。
  • 你又是对的!清除的密码是 ASCII,解密的密码是 UTF-8。我想知道该怎么做,以获得相同的编码......
  • 你的加解密算法应该没问题,字符串编码是最重要的。检查如何将解码的数据字节转换为新字符串(decodedPassword)
  • 我检查了一下,我对字符串的编码没有做任何事情,我唯一知道的是我有一个女巫是 UTF-8 和另一个 ASCII。这就是即使字符串完全相同也会使 md5 散列不同的问题。
【解决方案2】:

我可能会像@fpierrat 说的那样做,只是在客户端加密并在 PHP 服务器中直接比较 md5 哈希。

【讨论】:

  • 小心,还要添加一个随机盐,如我链接到的另一个答案中所述...否则,这意味着您只需从客户端向服务器发送存储在数据库中的确切字符串(密码的 md5),然后将与以明文形式发送密码一样安全;-) 再次使用相同的链接,以节省最终感兴趣的读者的时间:stackoverflow.com/a/27555577/3872061
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2018-03-23
  • 2015-04-13
  • 2015-09-08
  • 2019-05-08
  • 2023-03-15
相关资源
最近更新 更多