【问题标题】:how to create md5 or sha1 checksum of a file without loading its contents to memory?如何在不将文件内容加载到内存的情况下创建文件的 md5 或 sha1 校验和?
【发布时间】:2012-12-05 15:18:34
【问题描述】:

我的意思是类似 php sha1_file.

我发现不需要像 boost 之类的外部库的非常好的和紧凑的脚本:http://code.google.com/p/smallsha1/source/browse/trunk/sha1.cpp

但是当文件大小为例如 10GB 时,有没有办法将文件流传递给它?

【问题讨论】:

  • 这些是增量哈希,所以你读入文件的一个块,更新上下文,读入下一个块......

标签: c++ winapi md5 checksum sha


【解决方案1】:

对于大文件,您可以对文件的一部分进行内存映射,计算总和,重新映射到文件的下一部分并继续求和,等等。

【讨论】:

    【解决方案2】:

    那个确切的代码不能接受流,不。

    查看循环while (currentBlock <= endOfFullBlocks)。它通过实际的哈希码一次运行 64 个字节。因此,为了修改此代码以获取流,您需要它从流中读取这 64 个字节,而不是从 sarray(指向与输入 src 相同的数据)中获取它们。

    每次读取 64 字节不是读取 10GB 数据的有效方法,因此实际上您可能希望引入第二个循环:一个从文件中读取更大的块,另一个放入 64 字节通过哈希块。

    您当然还需要修改代码以处理输入数据中不是 64 倍数的“剩余”部分。

    或者,使用“init”、“update”、“finish”/“digest”函数找到不同的 SHA1 实现,然后改用它。此类接口的想法是,您可以根据需要多次调用“更新”,传入方便读取流的任何大小的数据块。

    【讨论】:

      猜你喜欢
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      相关资源
      最近更新 更多