【发布时间】:2012-03-06 12:18:23
【问题描述】:
我需要在以下情况下检查数据完整性:数据以不同大小的块写入存储(对于每个块,我们知道它在最终文件中的偏移量)。但是,这些块以任意顺序和多个线程出现。它们以完全不同的顺序从存储中读回(并且块具有不同的大小)。
我目前的想法如下:
#define MODEST_PRIME 1021
unsigned char checkbuf[MODEST_PRIME];
void check_function(unsigned char *chunk, size_t offset, size_t length, unsigned char *result)
{
size_t i;
for(i=0; i<length; i++)
result[(i+offset)%MODEST_PRIME]^=chunk[i];
}
这似乎可以防止更改任何单个字节并且(在某种程度上)防止 块的交换(交换块之间的距离不太可能被大素数整除)。这个函数对不同块的结果可以只是异或在一起,所以它是完全可并行的。
但是,与 md5 sum 或任何其他现代哈希函数相比,此函数看起来非常简单。但据我了解,md5 sum 或 sha-1 sum 的计算不能以任意顺序完成。
好吧,问题是,我们有没有更好的解决方案
- 如果我们知道块的大小和偏移量(就像我上面概述的简单算法),可以按任意顺序计算。
- 可以提供至少与 md5 sum 相当的数据完整性检查。
【问题讨论】:
标签: c parallel-processing checksum data-integrity