gpt4 book ai didi

c# - 获取文件 SHA256 哈希码和校验和

转载 作者:太空狗 更新时间:2023-10-29 21:21:31 25 4
gpt4 key购买 nike

之前我问了一个question关于组合 SHA1+MD5 但在那之后我明白计算 SHA1 和 lagrge 文件的 MD5 并不比 SHA256 快。在我的例子中,一个 4.6 GB 的文件在 Linux 系统中使用默认实现 SHA256 和 (C# MONO) 大约需要 10 分钟。

public static string GetChecksum(string file)
{
using (FileStream stream = File.OpenRead(file))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}

然后我读了this topic并根据他们所说的以某种方式更改我的代码:

public static string GetChecksumBuffered(Stream stream)
{
using (var bufferedStream = new BufferedStream(stream, 1024 * 32))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(bufferedStream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}

但它没有这种感情,大约需要 9 分钟。

然后我尝试在 Linux 中通过 sha256sum 命令测试我的文件以获取相同的文件,这大约需要 28 秒,上面的代码和 Linux 命令都给出了相同的结果!

有人建议我阅读哈希码和校验和之间的区别,我找到了 this topic这解释了差异。

我的问题是:

  1. 是什么原因导致上述代码与Linux sha256sum在时间上如此不同?

  2. 上面的代码是做什么的? (我的意思是它是哈希码计算还是校验和计算?因为如果你在C#中搜索给出一个文件的哈希码和一个文件的校验和,它们都会达到上面的代码。)

  3. 是否存在针对 sha256sum 的有动机的攻击,即使 SHA256 是抗碰撞的?

  4. 如何使我的实现与 C# 中的 sha256sum 一样快?

最佳答案

public string SHA256CheckSum(string filePath)
{
using (SHA256 SHA256 = SHA256Managed.Create())
{
using (FileStream fileStream = File.OpenRead(filePath))
return Convert.ToBase64String(SHA256.ComputeHash(fileStream));
}
}

关于c# - 获取文件 SHA256 哈希码和校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38474362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com