我的意思类似于php sha1_file
。
我发现非常好且紧凑的脚本不需要外部库,如boost:http://code.google.com/p/smallsha1/source/browse/trunk/sha1.cpp
但是当文件大小为10GB时,有没有办法传递给它一个文件流?
答案 0 :(得分:5)
确切的代码无法获取流,没有。
查看循环while (currentBlock <= endOfFullBlocks)
。它通过实际的散列代码一次运行64个字节。因此,为了修改此代码以获取流,您需要从流中读取这64个字节,而不是从sarray
(指向与输入src
相同的数据)中获取它们。
每次读取64字节不读取10GB数据的有效方法,所以实际上你可能想引入第二个循环:一个从文件读取更大的块,一个读取64个字节通过哈希的那些块。
您当然还需要修改代码来处理输入数据的“剩余”部分,该部分不是64的倍数。
或者,使用“init”,“update”,“finish”/“digest”函数找到不同的SHA1实现,然后使用它。这种接口的想法是你可以多次调用“更新”,传入任何大小的数据块,方便阅读你的流。
答案 1 :(得分:0)
对于大文件,您可以将内存映射到文件的一部分,计算总和,重新映射到文件的下一部分并继续求和,依此类推。