【发布时间】:2011-03-23 14:29:13
【问题描述】:
我有一个用 C# 编写的 web 服务来处理一些值的验证。在其中,我需要检查调用 Java 客户端中生成的 MD5 哈希。
Java 客户端以这种方式生成哈希
Charset utf8Charset = Charset.forName("UTF-8");
byte[] bytesOfPhrase = phrase.getBytes(utf8Charset);
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfPhrase);
this._AuthenticationToken = new String(thedigest, utf8Charset);
C# webservice 以这种方式生成它的 has:
private static string HashString(string toHash)
{
MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
byte[] hashedBytes = md5Provider.ComputeHash(_StringEncoding.GetBytes(toHash));
return Convert.ToBase64String(hashedBytes);
}
我在 Java 代码中尝试了几个字符集,但它们都没有生成与 Java 生成的字符串类似的字符串。在每次调用期间使用相同的硬编码值(这意味着我已经对参数进行了硬编码,因此哈希值应该匹配)仍然会产生一个奇怪的 Java 字符串。
C# 哈希值示例:
6wM7McddLBjofdFJ3rU6/g==
我会发布 Java 生成的字符串示例,但它有一些非常奇怪的字符,我认为我不能在此处粘贴。
我做错了什么?
【问题讨论】: