c# - 无法散列超过 3GB 的文件

标签 c# hash md5

我正在尝试获取 200 个文件的哈希值,所有文件的大小都不同(从 100 字节到 10GB)。

我面临的主要问题是 md5 不适用于大小超过 3GB 的文件,只是给我 OutOfMemoryException

所以我想做的是对一个文件进行哈希处理,而不是对另一个文件进行哈希处理,然后再对另一个文件进行哈希处理(比如如果 private bool GenerateHash(String Path) 很忙,则等待,如果不是则继续,而且我希望能够散列大小大于 4GB 的文件(我的系统规范是 4930k 和 32GB Ram)。

我已经通过终端在 Linux 上完成了它,得到了所有的哈希值,但无法在 Windows 上做同样的事情。

目前正在将我所有的东西从服务器转移到家用 PC,并且不想下载相同的文件或更大的文件(检查哈希和大小)

有什么建议吗?

更新:这是散列文件的代码(编译为 x32 并运行 x64 Box)

public void HashFile(String FPath)
    {
        using (var md5 = MD5.Create())
        {
            using (var stream = File.OpenRead(FPath))
            {
                String ComputedHash = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", String.Empty).ToLower();

                WriteToFile(FPath + "  " + ComputedHash);
            }
        }
    }

最佳答案

你应该使用 TransformFinalBlockTransformBlock这样您就不会将整个内容读入内存。

来源:herehere (很好的例子 here too )

关于c# - 无法散列超过 3GB 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22969212/

相关文章:

c# - 检查字符串是否有单词

c# - 修改内部 .NET 类的方法实现

Ruby - 来自散列的 CSV,每个键的值垂直存储

perl - 钩子(Hook)为 Perl 中的每个哈希查找提供一个值

python - 如何使用 python 中的现有哈希器更新 hashlib.md5 哈希器?

c# - 使用文本框搜索 ListView 项目

c# - 如何在 C# 中将固定字节/char[100] 转换为托管 char[]?

r - R 中相同字符串的不同 md5 哈希值

functional-programming - 如何在 Elixir 中计算文件校验和?

python - 获取 md5 校验和的完成百分比