2012-08-08 30 views
0

我想用MurmurHash3唯一标识大块数据。此实现:MurmurHash3可以在多个部分散列一块数据(增量式)吗?

http://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.h

似乎并没有提供一种方式来逐步更新哈希,虽然 - 它似乎计算每给定的数据块中的一个单独的散。例如,如果我从磁盘散列512MB数据,我可能不希望一次将所有数据加载到内存中,或者如果我从网络散列未知数量的数据。有没有人曾经在这种情况下使用过MurmurHash3(逐渐散列大量数据)?如果你能指点我一些资源或替代实现,那将是很棒的:)。我正在寻找类似于OpenSSL的SHA256_Update的东西。

谢谢!

回答

4
+0

谢谢梦露!你碰巧知道128位散列的实现吗? – fyhuang 2012-08-09 06:48:52

+0

@fyhuang你应该能够跟随PMurHash.c相同的模式很容易,从128位版本替换数据类型和代码。祝你好运! – 2012-08-09 15:08:58

+1

正确,后https://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp#319什么(线319)将是你'CalculateFinalHash'实现的一部分。在它之前的每个块需要做的事情(你需要在调用之间存储'h1','h2'和'length')。另外请注意,您不需要实际传递数据块长度(或多个数据),它可以处理任何长度的数据。事实上,我发现使用更多数据的速度更快(由于这个紧密的循环) - 所以我选择了OS页面 - 使块变长。 – 2013-05-29 12:30:47

相关问题