Adler32是否有消息+;阿德勒和为零(如CRC32)

Adler32是否有消息+;阿德勒和为零(如CRC32),c,algorithm,checksum,adler32,C,Algorithm,Checksum,Adler32,CRC-32具有这样一个奇妙的特性,即在消息末尾附加一个CRC允许您通过计算整个事件的CRC来执行消息验证,如果校验和通过,最终结果将为零 这个属性对于CRC-32s同级的Adler32应该是真的吗 简短的回答似乎是“不”,但我只是想确保我没有遗漏什么 使用这里的示例消息,我使用zlib实现编写了下面的测试程序 #include <zlib.h> #include <stdio.h> #include <string.h> void print_sum( c

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

这个属性对于CRC-32s同级的Adler32应该是真的吗

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

使用这里的示例消息,我使用zlib实现编写了下面的测试程序

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

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

因此,答案不会比直接从设计算法的人那里得到的答案更好。谢谢
11e60398
248c052a
23da052a