2012-08-03 1 views
4

CRC-32는 메시지 끝에 CRC를 추가하면 전체 내용의 CRC를 계산하여 메시지 확인을 수행 할 수 있다는 놀라운 속성을 가지고 있습니다. 체크섬이 통과하면 최종 결과는 0이됩니다.메시지 + Adler의 Adler32는 (CRC32와 마찬가지로) 0이됩니다.

이 속성은 CRC-32 형제 인 Adler32?

짧은 대답은 "아니오"인 것처럼 보이지만 나는 단지 내가 뭔가를 놓치고 있지 않은지 확인하려고했습니다.

여기에 예를 들어 메시지를 사용하여, http://en.wikipedia.org/wiki/Adler-32, 나는 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); 
} 

를 사용하여 아래의 테스트 프로그램을 작성 그리고 이러한 결과입니다 : 당신이 발견으로

11e60398 
248c052a 
23da052a 

답변

3

가, 대답은 아니. 이 속성은 검사 값에 필요하지 않습니다. 실제로 대부분의 CRC 검사 구현은 결국 CRC를 실행하지 않습니다. 그들은 단지 계산 된 CRC가 저장된 CRC와 같은지 확인합니다.

+0

그래서 대답은 알고리즘을 설계 한 사람에게서 직접 나온 것보다 더 좋아지지 않습니다. 감사! –

관련 문제