【发布时间】: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()函数。对于 PHPpassword_hash() compatibility pack。 MD5 很旧,被认为已损坏。
标签: php encryption mcrypt