如何解决未知的旋转/添加数据完整性检查算法
我正在查看一些将数据加载到内存中的代码,并且在加载结束时,它会对数据执行某种类型的完整性检查。完整性检查以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 举报,一经查实,本站将立刻删除。