我正在使用Windows Phone 7应用程序。我正在使用this implementation在Silverlight中进行MD5哈希。
我正在使用此代码 -
protected string GetMD5Hash(string input)
{
byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
MD5Managed md5 = new MD5Managed();
byte[] hash = md5.ComputeHash(bs);
StringBuilder sb = new StringBuilder();
foreach (byte b in bs)
{
sb.Append(b.ToString("x2").ToLower());
}
return sb.ToString();
}
但是,我没有为我提供的输入获得正确的MD5哈希值。我不确定这段代码有什么问题。如果有人在Silverlight中使用this implementation进行MD5哈希,你知道我哪里出错吗?
答案 0 :(得分:11)
您将返回输入的十六进制版本,而不是哈希:
foreach (byte b in bs)
应该是
foreach (byte b in hash)
(另一种方法是使用Convert.ToBase64String(hash)
,如果你不介意它是在Base64而不是hex。)
答案 1 :(得分:4)
已经有一个已接受的答案,但对于在Silverlight或Windows Phone中使用MD5的其他人,我发布了一个链接到MD5的another implementation,我已经取得了更大的成功。
我花了几个小时用原始帖子提到的实现将我的头撞在墙上,试图让它在我的Windows Phone项目中运行。它在某些情况下工作而在其他情况下不工作。
杰克威尔科克斯的版本运作得很好。