我一直在尝试将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);
答案 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总和将不同。