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

标签 c parallel-processing checksum data-integrity

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

我目前的想法是:

    #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];
    }

这似乎提供了防止更改任何单个字节的保护,并且(在某种程度上)防止 block 的交换(交换 block 之间的距离不太可能被大质数整除)。该函数针对不同 block 的结果可以简单地异或在一起,因此它是完全可并行化的。

但是,与 md5 sum 或任何其他现代哈希函数相比,此函数看起来非常简单。但据我所知,md5 和或 sha-1 和的计算不能以任意顺序进行。

好吧,问题是,我们有没有更好的解决方案

  1. 如果我们知道 block 的大小和偏移量(就像我上面概述的简单算法),则可以按任意顺序计算。
  2. 可以提供至少与 md5 sum 相当的数据完整性检查。

最佳答案

一个选项是树状校验和层次结构。

如果有两层,您可以将 block 放在树的第一层(底部)。树的第 2 层是一个字节数组,通过连接较低层的校验和创建。

这适用于任何哈希函数。

关于c - 用于数据完整性检查的可并行哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583568/

相关文章:

android - 验证Android apk没有被重新打包?

android - lsetfilecon失败:传输端点上不支持该操作

c - 为什么数组变量等于它的地址?

multithreading - 我怎样才能在MATLAB中 'tell'每个CPU核心做什么?

javascript - 为什么声明式编码适用于并行计算

python - 将字符串解释为十六进制字符序列

c - gtk+ 3.x 键绑定(bind) - 苦苦挣扎

c - 嵌套函数及其用途,一个接一个调用的函数?

python - 在 Python 中使用协程进行并行编程

c - 反转 CRC32(a)