循环MD5在PHP和WP7上返回不同的值

时间:2011-11-24 15:27:14

标签: php windows-phone-7 hash md5

我一直在尝试将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);

2 个答案:

答案 0 :(得分:4)

这是因为在WP7中,您正在散列第一个散列的二进制表示,而在PHP中,您正在散列它的ASCII表示。

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

我不知道100%肯定,但如果对此的答案是其他任何事情,我会感到惊讶。

话虽如此,看看the page you linked to上的评论,看起来好像过去有这个MD5实现的错误 - 所以它可能只是一个Silverlight错误。

答案 1 :(得分:3)

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