【发布时间】:2011-02-24 14:10:32
【问题描述】:
我有一个在 C# 中生成 MD5 哈希的函数,如下所示:
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(data);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
sb.Append(result[i].ToString("X2"));
}
return sb.ToString();
在 java 中,我的函数如下所示:
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(bytes,0,bytes.length);
String hashcode = new BigInteger(1,m.digest()).toString(16);
return hashcode;
当 C# 代码生成:“02945C9171FBFEF0296D22B0607D522D”时,java 代码生成:“5a700e63fa29a8eae77ebe0443d59239”。
有没有办法为相同的字节数组生成相同的 md5 哈希?
按需:
这是java中的测试代码:
File file = new File(System.getProperty("user.dir") + "/HashCodeTest.flv");
byte[] bytes = null;
try {
bytes = FileUtils.getBytesFromFile(file);
} catch (IOException e) {
fail();
}
try {
generatedHashCode = HashCode.generate(bytes);
} catch (NoSuchAlgorithmException e) {
fail();
}
这是我的 C# 代码
var blob = GetBlobByHttpPostedFile(httpPostedFile);
var hashCode = Md5Factory.ConvertByteArray(blob);
private static byte[] GetBlobByHttpPostedFile(HttpPostedFile httpPostedFile)
{
var contentLength = httpPostedFile.ContentLength;
var result = new byte[contentLength];
var inputStream = httpPostedFile.InputStream;
inputStream.Read(result, 0, contentLength);
return result;
}
干杯
【问题讨论】:
-
您发布了测试 code 但没有测试 data。不要从文件或通过 HTTP 加载 - 只需将一些数据(任何数据)硬编码到您的测试中。
-
特别是,我刚刚用我正在寻找的示例编辑了我的答案 - 那些 do 显示相同的哈希,代码实际上是相同的和你一样。请注意,在您的 C# 代码中,您忽略了
Stream.Read的结果,这绝不是一个好主意...