Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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
C# SHA1哈希计算不返回java和c的相同结果#_C#_Java_.net_Sha1 - Fatal编程技术网

C# SHA1哈希计算不返回java和c的相同结果#

C# SHA1哈希计算不返回java和c的相同结果#,c#,java,.net,sha1,C#,Java,.net,Sha1,我在我的.net和Java应用程序中计算哈希值。但是当他们给我结果时,我遇到了一个问题,因为他们都给出了不同的结果。在搜索这个问题时,我发现了这些问题,并根据他们的答案进行了应用,但不幸的是我没有成功。我也尝试了UTF-8和UTF-16LE,但结果还是不一样。 现在我陷入困境,想知道为什么会发生这种情况,以及如何解决这个问题下面给出了我的代码片段.Net byte[] buffer2 = new SHA1CryptoServiceProvider().ComputeHash(bytes); J

我在我的.net和Java应用程序中计算哈希值。但是当他们给我结果时,我遇到了一个问题,因为他们都给出了不同的结果。在搜索这个问题时,我发现了这些问题,并根据他们的答案进行了应用,但不幸的是我没有成功。我也尝试了
UTF-8
UTF-16LE
,但结果还是不一样。
现在我陷入困境,想知道为什么会发生这种情况,以及如何解决这个问题

下面给出了我的代码片段
.Net

byte[] buffer2 = new SHA1CryptoServiceProvider().ComputeHash(bytes);

Java

MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        byte[] buffer2 = sha1.digest(bytes);

任何帮助都将不胜感激。

我认为问题在于,在C#中,字节是无符号类型,而在java中则不是

这两种代码同样适用:

    public static void main(String[] args) throws NoSuchAlgorithmException {
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        byte[] bytes = new byte[] { 1, 2, 10 };
        byte[] buffer2 = sha1.digest(bytes);
        for(byte b : buffer2){
            System.out.println(b);
        }
    }

    static void Main(string[] args)
    {
        var bytes = new byte[] { 1, 2, 10 };
        var buffer = new SHA1CryptoServiceProvider().ComputeHash(bytes);
        foreach (var b in buffer)
        {
            Console.WriteLine((sbyte)b); //attention to cast           
        }
        Console.Read();
    }

我认为问题在于,在C#中,字节是无符号类型,而在java中则不是

这两种代码同样适用:

    public static void main(String[] args) throws NoSuchAlgorithmException {
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        byte[] bytes = new byte[] { 1, 2, 10 };
        byte[] buffer2 = sha1.digest(bytes);
        for(byte b : buffer2){
            System.out.println(b);
        }
    }

    static void Main(string[] args)
    {
        var bytes = new byte[] { 1, 2, 10 };
        var buffer = new SHA1CryptoServiceProvider().ComputeHash(bytes);
        foreach (var b in buffer)
        {
            Console.WriteLine((sbyte)b); //attention to cast           
        }
        Console.Read();
    }

所以,我只是简单地回顾一下我的评论作为一个答案。 见此:
基本上,Java字节是有符号的,而C#字节不是。
这两个结果的内部表示形式是相同的,但除非进行适当的转换,否则打印它们将产生不同的结果。

因此,请简要回顾一下我的评论作为答案。 见此:
基本上,Java字节是有符号的,而C#字节不是。
两个结果的内部表示形式相同,但除非进行适当的转换,否则打印它们将产生不同的结果。

可能是endianness的问题?您看到了吗?在这两种情况下,
字节的值是多少?不,我没有找到。。让我检查一下它们是否有相同的值。。。他们有什么不同?也许问题出在endianness?你看到了吗?在这两种情况下,
字节的值是多少?不,我没有找到。。让我检查一下它们是否有相同的值。。。它们有何不同?