c# - 保存文件时计算哈希?

标签 c# hash

我有一个inputStream,我想用它来计算散列并将文件保存到磁盘。我想知道如何有效地做到这一点。我是否应该同时使用某些任务来执行此操作,是否应该将流传递复制到两个流,一个用于 saveFile 方法,一个用于 computeHash 方法,或者我应该做点别的?

最佳答案

使用在 block 级别上运行的哈希算法怎么样?您可以将 block 添加到哈希(使用 TransformBlock),然后将 block 写入流中每个 block 的文件。

未经测试的粗略镜头:

using System.IO;
using System.Security.Cryptography;

...

public byte[] HashedFileWrite(string filename, Stream input)
{
    var hash_algorithm = MD5.Create();

    using(var file = File.OpenWrite(filename))
    {
        byte[] buffer = new byte[4096];
        int read = 0;

        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            hash_algorithm.TransformBlock(buffer, 0, read, null, 0);
            file.Write(buffer, 0, read);
        }

        hash_algorithm.TransformFinalBlock(buffer, 0, read);
    }

    return hash_algorithm.Hash;
}

关于c# - 保存文件时计算哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125135/

相关文章:

c++ - Knuth 的乘法散列函数通过位移位

java - 如何将文本文件放入Java中的哈希表中?

python - 将散列分配给 Pandas 中的分类数据行

c# - LINQ Group 嵌套列表重构数据

c# - 盲目地将结构转换为类以隐藏默认构造函数?

c# - 扩展方法 ConvertAll

bash - 使用 'hash' 命令

c# - Entity Framework 代码优先中的奇怪实体更新

c# - 如何移动工具提示?

ruby - 如果指定键的值在数组中相同,如何合并哈希