首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >message + adler的Adler32之和是否为零(如CRC32)

message + adler的Adler32之和是否为零(如CRC32)
EN

Stack Overflow用户
提问于 2012-08-03 22:59:41
回答 1查看 361关注 0票数 4

CRC-32具有这样一个奇妙的特性:将CRC附加到消息的末尾,允许您通过计算整个事物的CRC来执行消息验证,如果校验和通过,最终结果将为零。

这个属性是否适用于CRC-32的兄弟,即Adler32?

简短的回答似乎是“不”,但我只是想确保我没有遗漏什么。

通过这里的示例消息http://en.wikipedia.org/wiki/Adler-32,我使用zlib实现编写了下面的测试程序

代码语言:javascript
复制
#include <zlib.h>
#include <stdio.h>
#include <string.h>

void print_sum( const char * str )
{
   uLong asum = 0;
   asum = adler32( 0, Z_NULL, 0 );
   asum = adler32( asum, str, strlen(str) );
   printf( "%x\n", asum);
}

int main (int argc, char** argv)
{
   const char * msg1 = "Wikipedia";
   const char * msg2 = "Wikipedia\x98\x03\xe6\x11";
   const char * msg3 = "Wikipedia\x11\xe6\x03\x98";

   print_sum( msg1 );
   print_sum( msg2 );
   print_sum( msg3 );
}

结果如下:

代码语言:javascript
复制
11e60398
248c052a
23da052a
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-04 00:07:53

正如你所发现的,答案是否定的。校验值不需要该属性。事实上,大多数CRC校验实现都不会在最后运行CRC。它们只是检查计算出的CRC是否等于存储的CRC。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11798222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档