相同的密码但不同的md5哈希

时间:2014-12-28 21:33:53

标签: php encryption mcrypt

当我传递清除密码以检查用户的登录并在字符串上应用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()表现得像那些相同的密码字符串?再次感谢。

2 个答案:

答案 0 :(得分:3)

解密的密码与原始密码不同。检查两个字符串的长度,检查编码,做一个字节到字节的比较。 "你好\ 0"和"你好\ 0"似乎完全相同,但他们不是。甚至"你好\ 0"和"你好\ 0 \ 0 \ 0"不一样。也许解密算法给出了32字节的字符串长度。

答案 1 :(得分:0)

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