Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MD5在C#和Java之间生成不同的结果_Java_C#_Md5 - Fatal编程技术网

MD5在C#和Java之间生成不同的结果

MD5在C#和Java之间生成不同的结果,java,c#,md5,Java,C#,Md5,我有一个字节数组,我想分别计算java和C#中的MD5散列。然而,它们产生了截然不同的结果 下面是我的C#代码: 它生成md5散列:85126,37,15,86254,54,94243185219,84,21,17192153, 下面是java代码: byte[] input = {90,12,-56,-117,85,104,9,-54,0,0,0,0,28,-5,54,-47,-23,-103,79,1}; byte[] md5 = MessageDigest.getInstance("MD5

我有一个字节数组,我想分别计算java和C#中的MD5散列。然而,它们产生了截然不同的结果

下面是我的C#代码:

它生成md5散列:
85126,37,15,86254,54,94243185219,84,21,17192153,

下面是java代码:

byte[] input = {90,12,-56,-117,85,104,9,-54,0,0,0,0,28,-5,54,-47,-23,-103,79,1};
byte[] md5 = MessageDigest.getInstance("MD5").digest(input);
其结果是:
-56,-74,-89,-76,9,35,-83,-89,-73,-39,17,83,24,18,-91,-62,

正如你所看到的,结果是完全不同的。我知道c#使用无符号字节,java使用有符号字节。没有办法让我相信结果是一样的

提前感谢。

您的C#和Java输入不一样

让我们尝试将C#输入转换为有符号字节:

byte[] input = { 90, 12, 200, 139, 85, 104, 9, 202, 0, 0, 0, 0, 28, 251, 54, 201, 233, 153, 79, 1 };

sbyte[] signedInput = input.Select(i => unchecked((sbyte)i)).ToArray();
Console.WriteLine(string.Join(", ", signedInput));
这将产生:

90、12、-56、-117、85、104、9、-54、0、0、0、28、-5、54、-55、-23、-103、79、1

这里有一个不同的字节,粗体。Java版本在此偏移量处包含-47

为了确保这一点,我们可以使用Java版本的输入进行简单的检查:

var javaInput = new[] { 90, 12, -56, -117, 85, 104, 9, -54, 0, 0, 0, 0, 28, -5, 54, -47, -23, -103, 79, 1 };
var javaInputUnsigned = javaInput.Select(i => unchecked((byte)i)).ToArray();
var hash = MD5.Create().ComputeHash(javaInputUnsigned).Select(i => unchecked((sbyte)i)).ToArray();
Console.WriteLine(string.Join(", ", hash));
这将产生与Java版本相同的结果:

-56、-74、-89、-76、9、35、-83、-89、-73、-39、17、83、24、18、-91、-62


非常感谢。没有注意到输入数据不同
var javaInput = new[] { 90, 12, -56, -117, 85, 104, 9, -54, 0, 0, 0, 0, 28, -5, 54, -47, -23, -103, 79, 1 };
var javaInputUnsigned = javaInput.Select(i => unchecked((byte)i)).ToArray();
var hash = MD5.Create().ComputeHash(javaInputUnsigned).Select(i => unchecked((sbyte)i)).ToArray();
Console.WriteLine(string.Join(", ", hash));