下午好! ;)
我想做什么:
我对验证传输的文件完整性感兴趣。
我如何接近它:
我正在考虑使用哈希码,但是有一个问题。文件可能非常大,所以我需要能够迭代生成哈希。我无法将整个文件加载到内存中。
到目前为止我看过的内容:
我正在调查murmur3和skein的哈希函数。我相信我理解如何使它与绞纱一起工作,但我构建的版本未通过所有已知的结果单元测试。我不确定如何“连锁”杂音以获得有效的结果。
有什么建议吗?
答案 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)