0

我在我的 .net 和 Java 应用程序中计算哈希值。但是当他们给我结果时我遇到了一个问题,因为两者都给出了不同的结果。在搜索这个问题时,我发现这些问题
问题 1问题 2因此根据他们的应用在那里答案,但不幸的是我没有成功。我也尝试过UTF-8UTF-16LE但结果又不一样了。
现在我被卡住了,想知道为什么会这样,我该如何解决这个问题
我的代码片段如下
.Net

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


爪哇

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

任何帮助将不胜感激。

4

2 回答 2

3

我认为问题在于 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();
    }
于 2012-12-06T10:51:43.977 回答
2

所以只是回顾一下我的评论作为答案。请参阅:Calculating SHA-1 hashes in Java and C#
Basic - Java bytes are signed while C# bytes not. 两个结果的内部表示将是相同的,但打印它们会产生不同的结果,除非您进行适当的转换。

于 2012-12-06T10:52:52.323 回答