我需要在以下情况下检查数据完整性:将数据以不同大小的块(对于每个块,我们知道它在最终文件中的偏移量)写入存储区。但是,块以任意顺序和多个线程进行。它们以完全不同的顺序从存储中读回(并且块具有不同的大小)。用于数据完整性检查的可并行化的散列函数
我目前想到的是以下几点:
#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总和相当的数据完整性检查。
那么,这对读取和写入的不同大小块又不太好用,因为如果块的大小与树的较低级别上的散列块的大小不一致,我们将不得不等待块的所有块到达。 – begemotv2718 2012-03-06 13:00:48