E D R S I H C RSS
ID
Password
Join
무실(務實)?역행(力行)하고 충의(忠義)?용감(勇敢)하라. - 안창호(安昌浩)



Contents

1 개요
2 관련 링크
3 ACE
4 괜찮은 용도
5 C code

1 개요 #

CRC-32는 ISO-3309을 통해 발표된 cyclic redundancy check에 기초한 채크섬 생성 알고리즘입니다. 결과 체크섬값은 4바이트의 octet으로 계산됩니다. CRC-32는 키기반의 방식도 아니고 원본값이 겹치는 것(충돌)을 방지한다는 것을 보장하지도 않습니다. (대신 연산속도는 꽤 빠른 편입니다. 충돌확률도 그리 낮은 편은 아닙니다.) 그러므로 보안체계 공격자는 체크섬을 만족하는 또다른 메세지를 생성하기위해 예측가능한 텍스트 모음을 통한 공격을 사용할 수 있습니다. 이렇게 심각한 위험이 우려되는 부분에는 충돌방지를 보장해주는 체크섬방식을 사용하는 것이 좋습니다.

2 관련 링크 #

3 ACE #

ACE에서는 ACE_OS::crc32() 전역 메소드를 통하여 이 값을 생성할 수 있습니다.

4 괜찮은 용도 #

루아에서 __index 메타메소드를 사용해서 문자열을 키값으로 받는경우(즉, 필드처리할 경우), 매개변수로 넘어온 필드명 문자열을 strcmp()로 비교하는건 좀 미친 짓입니다. 이때 비교할 필드에 대한 crc32값을 미리 구해두고 매개변수로 전달된 필드명 문자열의 crc32값을 구해 비교하면 if stcmp() ...else if strcmp() ... 체계가 아닌 switch(hash_key) { } 문으로 깔끔하게 정리되고 속도도 개선될 수 있겠죠.

5 C code #

/*------------------------------ crc.h ----------------------*/
#ifndef _PRINTF_H          /* defined in stdio.h */
#include <stdio.h>
#endif

/* generate the crc table. Must be called before calculating the crc value */
void gen_table(void);
unsigned long get_crc(FILE *);   /* calculate the crc32 value */
/*-----------------------------------------------------------*/

/*-------------------------- crc.c --------------------------*/

static unsigned long crc_table[256];

void gen_table(void)                /* build the crc table */
{
    unsigned long crc, poly;
    int i, j;

    poly = 0xEDB88320L;
    for (i = 0; i < 256; i++)
        {
        crc = i;
        for (j = 8; j > 0; j--)
            {
            if (crc & 1)
                crc = (crc >> 1) ^ poly;
            else
                crc >>= 1;
            }
        crc_table[i] = crc;
        }
}

unsigned long get_crc( FILE *fp)    /* calculate the crc value */
{
    register unsigned long crc;
    int ch;

    crc = 0xFFFFFFFF;
    while ((ch = getc(fp)) != EOF)
        crc = (crc>>8) ^ crc_table[ (crc^ch) & 0xFF ];

    return( crc^0xFFFFFFFF );
}

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.3272 sec