2011-03-10 43 views
2

下午好!超越! ;)生成散列数据大于内存(未被捕)

我想要做什么:

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

如何走近它:

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

我看在什么至今:

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

有什么建议吗?

+0

Egad!我打电话给哈希警察!你肯定会被捕的! – corsiKa 2011-03-10 22:47:41

+0

那么看看http://en.wikipedia.org/wiki/Cyclic_redundancy_check – dexter 2011-03-10 22:48:52

+0

怎么样我想到CRC的,但认为哈希函数是优越的。谢谢 – Jay 2011-03-10 22:52:32

回答

5

大多数散列算法都是对固定大小的数据块进行操作 - 例如,查看SHA1或MD5参考实现,它们使用“init/loop {update}/finalize”结构,允许您在每次更新时按照您的意愿传递尽可能多或少的数据。

看着如绞纱,它们使用相同的概念在他们的参考实现:

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); 

为什么你认为你需要通过整个数据作为一个块?你在看简单的包装函数吗?

+0

我有一个它编译的版本,但是我不能让它生成作者得到的输出。他向SHA比赛委员会提交了一套“KAT”测试结果。 – Jay 2011-03-10 22:55:40

+0

我在看杂音散列,并没有看到像迭代一样使用它的方式,就像用绞线一样。唯一的问题是我不相信我的绞线版本工作正常。根据作者的论文,我无法得出正确的答案。我想我会继续尝试调试绞纱。 – Jay 2011-03-11 00:45:21

+0

我接受此答案。即使skein代码没有得到我认为应该是正确的答案,它通过测试旨在看看它是否是一个工作散列。 – Jay 2011-03-11 15:50:49

1

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

here's如何使用它。