繁体   English   中英

MD5结果不同

[英]Different MD5 results

我正在将使用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哈希值已损坏的用户是否有效。

我认为这可能对您有帮助: Java md5,PHP方式

在我看来就像是同样的问题。

嗨,我要做的是将md5哈希存储在您的数据库中,每当您检测到该特定用户的登录名时,便将其转换为PBKDF2(它更安全)。 然后,您可以删除旧的md5。

本指南向您展示如何进行。

https://crackstation.net/hashing-security.htm#javasourcecode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM