use*_*964 14 c# java md5 bytearray
我有一个在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();
Run Code Online (Sandbox Code Playgroud)
在java中,我的函数如下所示:
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(bytes,0,bytes.length);
String hashcode = new BigInteger(1,m.digest()).toString(16);
return hashcode;
Run Code Online (Sandbox Code Playgroud)
当C#代码生成:"02945C9171FBFEF0296D22B0607D522D"时,java代码生成:"5a700e63fa29a8eae77ebe0443d59239".
有没有办法为同一个bytearray生成相同的md5哈希?
一经请求:
这是java中的testcode:
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();
}
Run Code Online (Sandbox Code Playgroud)
这是我在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;
}
Run Code Online (Sandbox Code Playgroud)
干杯
Jon*_*eet 25
这应该没问题 - 尽管你可以通过调用来简化Java代码
byte[] digest = m.digest(bytes);
Run Code Online (Sandbox Code Playgroud)
而不是调用update然后digest.
你绝对相信你在两种情况下都有相同的数据吗?您是否可以使用相同的硬编码数据发布显示此失败的示例程序?
编辑:这是我想到的那种测试.这两个程序给出了相同的结果:
C#:
using System;
using System.Security.Cryptography;
using System.Text;
class Test
{
static void Main()
{
byte[] bytes = { 0x35, 0x24, 0x76, 0x12 };
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(bytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
sb.Append(result[i].ToString("x2"));
}
Console.WriteLine(sb);
}
}
Run Code Online (Sandbox Code Playgroud)
Java的:
import java.math.BigInteger;
import java.security.MessageDigest;
public class Test
{
public static void main(String[] args) throws Exception
{
byte[] bytes = { 0x35, 0x24, 0x76, 0x12 };
MessageDigest m = MessageDigest.getInstance("MD5");
byte[] digest = m.digest(bytes);
String hash = new BigInteger(1, digest).toString(16);
System.out.println(hash);
}
}
Run Code Online (Sandbox Code Playgroud)