我正在将用Java struts开发的应用程序移植到PHP,数据库在MySQL中,
PHP,MySQL或在线MD5为NtbPq产生了这个:
db94207ab2924504e0f590682645258a
应用程序使用相同的密码生成此内容的位置:
db94207ab292454e0f590682645258a
^
注意缺少的1个字符。现在Java应用程序运行完美并记录用户,但PHP无法验证并说它与PHP md5函数不匹配。
有没有任何解决方案我可以使用java char md5来验证PHP?
编辑:问题是我还没有开发java应用程序,现在有超过400个用户,我想在php中移植,我不知道关于java的事情,我只是想非常那些31个字符md5在PHP
答案 0 :(得分:2)
我强烈怀疑如果一个字节的前导nybble为0,那么你在应用程序中使用的十六进制转换是失败的。这可能是因为你在应用程序本身中有十六进制转换代码,而不是使用标准库。
解决方案:找到十六进制转换代码,将其删除,然后使用标准库。例如,正如你的评论似乎是产生错误结果的Java代码(你的帖子不是很清楚),你可以使用Apache Commons Codec。
然而,正如评论中所述,无论如何都应该尽量避免使用MD5。现在可能也可能不可行,但它应该在你的中期路线图上。
编辑:作为临时措施,您可以编写自己的PHP代码来模拟破坏。基本上,您需要执行正常的MD5散列,然后获取十六进制结果并从中移除任何出现在偶数位置的“0”。因此,例如“ab0120”最终会变为“ab120” - 因为第一个'0'位于第2位,但最后一个'0'位于第5位。或者,自己执行十六进制转换,一次转换一个字节并从每个双字符结果中修剪任何前导'0'字符。应尽快删除此代码,仅用于验证存储MD5哈希值较差的用户是否有效。
答案 1 :(得分:0)
我认为这可能对您有所帮助: Java md5, the PHP way
对我来说就像是同样的问题。
答案 2 :(得分:0)
我要做的是将md5哈希存储在您的数据库中,每当您检测到该特定用户的登录时,将其转换为PBKDF2(它更安全)。然后你可以删除旧的md5。
本指南介绍如何操作。
https://crackstation.net/hashing-security.htm#javasourcecode