微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未知的旋转/添加数据完整性检查算法

如何解决未知的旋转/添加数据完整性检查算法

我正在查看一些将数据加载到内存中的代码,并且在加载结束时,它会对数据执行某种类型的完整性检查。完整性检查以4个字节的块为单位读取缓冲区,并将其添加到累加器,在每次加法之间将累加器向右旋转1。如果累加器以0结尾,则数据正常。

我知道缓冲区的最后一个字节不是数据本身的一部分,这意味着最后4个字节是将累加器翻转为0的“魔术数”。我也知道它使用的是4个字节的块,具体为这是认为32位cpu。随附的是代码的重新制作:

#define ROR32(i,c) ((i >> c)|(i << (32 - c)))
void check(uint32_t *buffer,uint32_t size) {
        uint32_t i,ret = 0;
        for (i=0; i < size/4 ; i++) {
                ret = ROR32(ret,1);
                ret += buffer[i];
        }

        if (ret)
                printf("Data corrupt (%d)\n",ret);
        else
                printf("Data OK.\n");
}

我一直想知道这是否是标准的完整性算法(它有名称吗?),以及为什么旋转位?我没有找到类似的东西,因为搜索关键字“校验和”,“完整性”,“ ror”和“ sum”对于任何有意义的结果都是模糊的。

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。