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

标签 c# java .net sha1

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

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


Java

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

任何帮助将不胜感激。

最佳答案

我认为问题是在 C# 中 byte 是无符号类型,而在 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 和 c# 的 SHA1 哈希计算未返回相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13741676/

相关文章:

.net - 连接到 VPN 时,带有 Windows 容器的 Docker for Windows 无法正常工作

c# - 如何在 VSTO 的 Excel 状态栏中显示 "Updating Workflow Status"进度条?

c# - 声明类变量 (List) 或将其发送给许多函数。什么是更好的?

c# - 带有 OnFaulted 延续的任务在 WaitAll 上抛出 TaskCancelledException

c# - WPF ListView 拖动而不取消选择

java - 如何修复 'android.os.NetworkOnMainThreadException' ?

java - Spring Data JPA 存储库

java - 插入 map 时按值保留顺序

c# - 在 .NET 中乘法比比较快吗?

c# - 错误 - 无法加载具有固定名称 'System.Data.SQLite.EF6' 的 ADO.NET 提供程序