我需要在以下情況下檢查數據完整性:將數據以不同大小的塊(對於每個塊,我們知道它在最終文件中的偏移量)寫入存儲區。但是,塊以任意順序和多個線程進行。它們以完全不同的順序從存儲中讀回(並且塊具有不同的大小)。用於數據完整性檢查的可並行化的散列函數
我目前想到的是以下幾點:
#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