【问题标题】:how would I perform a SHA1 hash on a file?我将如何对文件执行 SHA1 哈希?
【发布时间】:2010-12-30 12:14:51
【问题描述】:

如果我有一个想要监控的文件是否有任何更改(除了查看文件日期戳等)。

如何对其内容执行 SHA1 哈希?

认为这就是 GIT 所做的,所以我只想学习如何去做

【问题讨论】:

  • 您是否有理由不只使用 FileSystemWatcher? msdn.microsoft.com/en-us/library/…
  • 因为它当然行不通。仅在某些受支持的文件系统上。
  • @Will 即使在受支持的文件系统上,也不能保证触发(缓冲区大小有限)。
  • @vossad01 很不幸,但确实如此。

标签: c# sha1


【解决方案1】:
using (FileStream stream = File.OpenRead(@"C:\File.ext"))
{
    using (SHA1Managed sha = new SHA1Managed())
    {
        byte[] checksum = sha.ComputeHash(stream);
        string sendCheckSum = BitConverter.ToString(checksum)
            .Replace("-", string.Empty);
    }
}

定期计算校验和。

【讨论】:

  • 那是一个文件,他问的是一个目录。
  • 他的问题是“如果我有一个文件要监视任何更改”,我阅读了“文件”,你在哪里看到目录?
【解决方案2】:

对于您描述的特定应用程序,找到目录中每个文件的 SHA-1 哈希,然后对它们进行异或运算会很好。

byte[] checksum = new byte[sha1Length];
for each file
   for (int index = 0; index < sha1Length; index++)
       checksum[index] ^= fileChecksum[index]

编辑添加: 正如 cmets 中所指出的,这不会真正起作用。一个特定的场景是添加两个相同的文件,这将在 XOR 中相互抵消。 也许创建一个包含所有文件名、时间戳和文件哈希的流,然后进行哈希处理,这将为您提供所需的内容。

再次编辑: 好的,现在你已经改变了你的问题!所以没关系!

【讨论】:

  • 如果安全是一个问题,xor 并不是真正可取的(他没有说它是,但也许......)。相反,我建议对文件进行排序并散列哈希值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 2011-03-11
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
相关资源
最近更新 更多