2

我的意思是类似的事情 php sha1_file

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

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

4

2 回答 2

5

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

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

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

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

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

于 2012-12-18T12:11:51.550 回答
0

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

于 2012-12-18T12:10:56.247 回答