【问题标题】:Looping MD5 returns different values on PHP and WP7循环 MD5 在 PHP 和 WP7 上返回不同的值
【发布时间】:2012-01-05 18:12:24
【问题描述】:

我一直在尝试将 MD5 哈希值集成到我的 WP7 应用程序中,但我注意到如果与 PHP 的 MD5 结果进行比较,Silverlight MD5 实现http://archive.msdn.microsoft.com/SilverlightMD5 不会返回相同的哈希值。如果我散列一次,散列值是相等的,但如果我散列多次,最终的散列结果是不同的。有其他人注意到这一点或知道为什么会发生这种情况、可能的解决方法等吗?

PHP Code
$pwd = "pwd";
for ($i=0; $i < 2 ; $i++)
{
    $pwd = md5($pwd);
}
print $pwd;

WP7 Code
String hashpwd = "pwd";
for (int i = 0; i < 2; i++)
        {
            String hash = hashpwd;             
            hashpwd = MD5Core.GetHashString(hash);
        }
MessageBox.Show(hashpwd);

【问题讨论】:

    标签: php windows-phone-7 hash md5


    【解决方案1】:

    这是因为在 WP7 中,您对第一个哈希的二进制表示进行哈希处理,而在 PHP 中,您对它的 ASCII 表示进行哈希处理。

    PHP 的md5() 函数返回一个 ASCII 字符串,其中包含以 ASCII 表示的 32 个十六进制数字 - 32 个字节。 WP7 版本将(可能)返回 16 个字节 - 哈希的真正二进制表示。

    我不能 100% 确定,但如果这个问题的答案是别的,我会感到惊讶。

    话虽如此,查看the page you linked to 上的 cmets 确实看起来过去此 MD5 实现存在错误 - 所以它可能只是 Silverlight 错误。

    【讨论】:

      【解决方案2】:

      假设 MD5 计算是正确的,您应该查看第一次运行的输出以及它们是否完全相同。例如,如果PHP使用小写字符a-f,而WP7使用大写字符A-F,则第二个MD5和会不同。

      【讨论】:

      • 你对这个案子的观点很有道理,我忘了。 +1。
      • 谢谢。在 WP7 中将我的哈希结果设置为小写即可解决问题!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      相关资源
      最近更新 更多