如何在使用BinaryWriter时有效地实现文件的哈希验证;读者

本文关键字:文件 哈希 验证 读者 实现 有效地 BinaryWriter | 更新日期: 2023-09-27 18:13:12

我对c#比较陌生,所以请原谅我。

我正在用c#编写一个小应用程序。NET 4.0)。对于编写文件,我使用以下代码的一些变体:

using (var fStream = new FileStream(filename, FileMode.CreateNew, FileAccess.Write, 
 FileShare.Read))
using (var crypto = new CryptoStream(fStream, encryptor, CryptoStreamMode.Write))
using (var binary = new BinaryWriter(crypto))

我想确保文件不被损坏,不被篡改。因此,我考虑使用sha256或hmac与sha256(如果它不是慢得多)。我不知道如何有效地实现文件内容的哈希

目前为止我的想法是:

1) hmac.ComputeHash(流)-但它不能在二进制流上工作-如果我使用文件流,我不知道它哈希流的哪个部分,因为我想把哈希附加到文件的末尾。因此,我不知道在阅读时如何对文件流进行哈希而不对附加的哈希进行哈希。

2.)使用二进制流来读写内存流,然后调用memory. toarray()并对字节数组进行哈希-我认为这是相当低效的

我该怎么办?

谢谢你的想法和答案。

如何在使用BinaryWriter时有效地实现文件的哈希验证;读者

所有HashAlgorithm都实现了ICryptoTransform

你可以简单地读取hashalgalgorithm周围的另一个CryptoStream,然后在你完成读取后检查它的哈希值

我最终使用了这个:

  1. 在内存中读写的二进制流
  2. 将内存流转换为字节数组
  3. 对字节数组
  4. 进行散列