Windows mobile 大数据量的高效内存哈希算法

Windows mobile 大数据量的高效内存哈希算法,windows-mobile,hash,sha1,Windows Mobile,Hash,Sha1,我正在Windows Mobile 5中使用C#。该程序从internet下载大文件及其哈希值。然后计算下载数据的散列值,并将其与预期的散列值进行比较。其目的是验证下载的整个文件是否未损坏 问题是,文件足够大,如果我将文件的全部内容放入字节数组中的内存中,那么设备将耗尽内存。但是我想这样做,这样我就可以计算字节的散列。是否可以在不同时将所有字节存储在内存中的情况下计算哈希?我最好使用SHA1Managed类来计算SHA1散列,但是如果需要的话,我愿意更改它。我确实注意到接受流的SHA1Manag

我正在Windows Mobile 5中使用C#。该程序从internet下载大文件及其哈希值。然后计算下载数据的散列值,并将其与预期的散列值进行比较。其目的是验证下载的整个文件是否未损坏


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

下面是在桌面上的实现方式:


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

下面是如何在桌面上完成的:


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

SHA1Managed.ComputeHash(stream)
如果在计算哈希值后丢弃流的内容,那么内存效率应该更高。您将使用多少内存将部分取决于
实现。

SHA1Managed.ComputeHash(Stream)
如果在计算哈希值后丢弃流的内容,则内存效率应该更高。您将使用多少内存部分取决于
实现。

如果数据已经写入文件,那么什么是好的流实现?只使用返回文件流的File.OpenRead(fileName)可以吗?我尝试使用一个足够大的文件,如果流实现将整个文件拖到内存中,它可能会耗尽内存。成功了,谢谢!如果数据已经写入文件,那么什么样的流实现才是好的呢?只使用返回文件流的File.OpenRead(fileName)可以吗?我尝试使用一个足够大的文件,如果流实现将整个文件拖到内存中,它可能会耗尽内存。成功了,谢谢!感谢您提出使用足够大的文件来测试流实现的想法!感谢您提出使用足够大的文件来测试流实现的想法!