C 用于数据完整性检查的可并行化哈希函数

C 用于数据完整性检查的可并行化哈希函数,c,parallel-processing,checksum,data-integrity,C,Parallel Processing,Checksum,Data Integrity,我需要检查以下情况下的数据完整性:数据以不同大小的块写入存储器(对于每个块,我们知道其在最终文件中的偏移量)。但是,块以任意顺序出现,并且以多个线程出现。它们以完全不同的顺序从存储器中读回(块的大小也不同) 我目前的想法如下: #define MODEST_PRIME 1021 unsigned char checkbuf[MODEST_PRIME]; void check_function(unsigned char *chunk, size_t offset, siz

我需要检查以下情况下的数据完整性:数据以不同大小的块写入存储器(对于每个块,我们知道其在最终文件中的偏移量)。但是,块以任意顺序出现,并且以多个线程出现。它们以完全不同的顺序从存储器中读回(块的大小也不同)

我目前的想法如下:

    #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];
    }
#定义适度_素数1021
无符号字符checkbuf[mustud_PRIME];
void check_函数(无符号字符*块、大小偏移、大小长度、无符号字符*结果)
{
尺寸i;

对于(i=0;i您难道不能计算每个块的连接偏移量、长度和内容的SHA1和,然后将它们异或在一起吗?

一个选项是类似于树的校验层次结构

对于两个级别,您可以将块放在树的第一(底部)级别。树的第二级别是通过连接较低级别的校验和创建的字节数组


这适用于任何哈希函数。

不,可能是我没有说清楚,但读取时的块与写入时的块不同(它们的大小不同),因此您的解决方案将不起作用,不幸的是。好吧,这对于读写时大小不同的块也不太起作用,因为如果块的大小与树的较低级别上的哈希块大小不一致,我们将不得不等待,直到块的所有块到达。