如何创建文件的md5或sha1校验和而不将其内容加载到内存?

rsk*_*k82 2 c++ winapi checksum md5 sha

我的意思是像在php中类似的东西sha1_file.

我找到了非常好的和紧凑的脚本,不需要像boost这样的外部库:http://code.google.com/p/smallsha1/source/browse/trunk/sha1.cpp

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

Ste*_*sop 5

确切的代码不能采取流,不.

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

每次读取64字节不是读取10GB数据的有效方法,因此实际上您可能想要引入第二个循环:一个用于从文件中读取较大的块,另一个用于通过散列放置64个字节块.

您当然还需要修改代码来处理输入数据的"剩余"部分,该部分不是64的倍数.

或者,使用"init","update","finish"/"digest"函数找到不同的SHA1实现,然后使用它.这种接口的想法是你可以多次调用"更新",传入任何大小的数据块,便于读取你的流.