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

Jay*_*Jay 2 c++ hash murmurhash

下午好!;)

我想做的事:

我有兴趣验证传输的文件完整性.

我是怎么找到它的:

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

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

我调查murmur3绞纱散列函数.我相信我理解如何使它与绞纱一起工作,但我构建的版本未通过所有已知的结果单元测试.我不确定如何"连锁"杂音以获得有效的结果.

有什么建议?

Eri*_*rik 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);
Run Code Online (Sandbox Code Playgroud)

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