大数据大小的内存高效哈希算法

时间:2011-04-22 23:38:47

标签: windows-mobile hash sha1

我在Windows Mobile 5中使用C#。该程序从互联网上下载大文件及其哈希值。然后,它计算下载数据的哈希值,并将其与预期的哈希值进行比较。我们的想法是验证整个文件是否未被破坏下载。

问题是该文件足够大,如果我将文件的全部内容放入字节数组的内存中,那么设备将耗尽内存。但是我想这样做,以便我可以计算字节的哈希值。是否可以在不同时在内存中包含所有字节的情况下计算哈希值?我最好使用SHA1Managed类计算SHA1哈希值,但我愿意在必要时更改它。我确实注意到接受Stream的SHA1Managed.ComputeHash()方法有一个重载,但我不知道它是否使用的内存少于将所有字节都拉入内存和我知道的内存分析器。 NET CF完全没用。

2 个答案:

答案 0 :(得分:3)

假设您在计算哈希值后丢弃流的内容,

SHA1Managed.ComputeHash(Stream)应该更有效。您将使用多少内存将部分基于Stream实施。

答案 1 :(得分:1)

以下是在桌面上完成的操作:

Compute a hash from a stream of unknown length in C#

通过使用大于可用内存量的输入源,测试流实现是否会拉入整个文件应该非常容易。