为大于内存的数据生成哈希值(不会被捕)

时间:2011-03-10 22:44:27

标签: c++ hash murmurhash

下午好! ;)

我想做什么:

我对验证传输的文件完整性感兴趣。

我如何接近它:

我正在考虑使用哈希码,但是有一个问题。文件可能非常大,所以我需要能够迭代生成哈希。我无法将整个文件加载到内存中。

到目前为止我看过的内容:

我正在调查murmur3skein的哈希函数。我相信我理解如何使它与绞纱一起工作,但我构建的版本未通过所有已知的结果单元测试。我不确定如何“连锁”杂音以获得有效的结果。

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

大多数哈希算法都在固定大小的数据块上运行 - 例如,您可以使用查找SHA1或MD5参考实现,它们使用“init / loop {update} / finalize”结构,允许您在每次更新时传递尽可能多的数据。

看例如Skein,他们在参考实现中使用相同的概念:

int  Skein_256_Init  (Skein_256_Ctxt_t *ctx, size_t hashBitLen);
int  Skein_256_Update(Skein_256_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt);
int  Skein_256_Final (Skein_256_Ctxt_t *ctx, u08b_t * hashVal);

为什么您认为需要将整个数据作为一个块传递?你在看简化的包装函数吗?

答案 1 :(得分:1)

你应该看看Crypto++。这是我最喜欢的加密C ++库。

here's如何使用它。