我正在将使用Java struts开发的应用程序移植到PHP,将数据库移植到MySQL中,
PHP,MySQL或在线MD5会为NtbPq生成此代码:
db94207ab2924504e0f590682645258a
当应用程序使用相同的密码生成此密码时:
db94207ab292454e0f590682645258a
^
请注意缺少的1个字符。现在,Java应用程序可以完美运行并登录用户,但是PHP无法验证并说它与PHP md5函数不匹配。
有什么解决方案可以通过Java使用31 char md5在PHP中进行验证吗?
编辑:问题是我还没有开发Java应用程序,现在有超过400个用户,我想在php中移植,我对Java一无所知,我只想在PHP中非常方便地使用31个字符的md5
我强烈怀疑如果字节的前半字节为0,则您在应用程序中使用的十六进制转换会失败。这可能是因为您在应用程序内部包含了十六进制转换代码,而不是使用标准库。
解决方案:找到十六进制转换代码,将其切出,然后使用标准库。例如,在您的评论中似乎是Java代码产生了错误的结果(您的帖子不是很清楚),您可以使用Apache Commons Codec。
但是,正如评论中指出的那样,无论如何都应避免使用MD5。目前可能可行,也可能不可行,但这应该在您的中期路线图上。
编辑:作为一种临时措施,您可以编写自己的PHP代码以模拟损坏情况。基本上,您需要执行常规的MD5哈希处理,然后获取十六进制结果并从中删除出现在偶数位置的所有“ 0”。因此,例如“ ab0120”将以“ ab120”结尾-因为第一个“ 0”位于位置2,但最后一个“ 0”位于位置5。或者,您自己执行十六进制转换,一次转换一个字节并从每个两个字符的结果中修剪所有前导“ 0”字符。该代码应尽快删除,仅用于验证存储的MD5哈希值已损坏的用户是否有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句