도구스개발

CRC 체크섬 계산기

CRC-8·CRC-16·CRC-32의 널리 쓰이는 14가지 변종을 한 번에 계산합니다. 같은 "CRC-16"이라도 초기값과 반사 설정이 다르면 값이 전혀 달라지는 것을 나란히 보여 줍니다.

UTF-8 바이트로 계산합니다. 한글 한 글자는 3바이트입니다.

zip·gzip·PNG·이더넷이 쓰는 그 CRC-32입니다.

CRC-32/ISO-HDLC

0xCBF43926

9바이트 · 10진수 3421780262

16진수0xCBF43926
10진수3421780262
입력 길이9바이트
2진수11001011111101000011100100100110
32비트
다항식0x04C11DB7
초기값0xFFFFFFFF
반사 (입력 / 출력)예 / 예
마지막 XOR0xFFFFFFFF
검산값 (“123456789”)0xCBF43926

이 다섯 가지가 값을 결정합니다.

x³² + x²⁶ + x²³ + x²² + x¹⁶ + x¹² + x¹¹ + x¹⁰ + x⁸ + x⁷ + x⁵ + x⁴ + x² + x + 1
지금 넣은 것이 표준 검산 문자열입니다. CRC 카탈로그는 모든 변종에 “123456789”를 넣었을 때 나와야 하는 값을 함께 적어 둡니다. 위 결과 0xCBF43926이 검산값 0xCBF43926과 같으면 구현이 맞는 것입니다. 다른 도구와 값이 다를 때 무엇이 틀렸는지 가리는 데 이 한 줄이 가장 빠릅니다.
CRC-8/SMBUS0xF4
CRC-8/MAXIM-DOW0xA1
CRC-16/ARC0xBB3D
CRC-16/MODBUS0x4B37
CRC-16/USB0xB4C8
CRC-16/IBM-SDLC0x906E
CRC-16/KERMIT0x2189
CRC-16/XMODEM0x31C3
CRC-16/IBM-37400x29B1
CRC-32/ISO-HDLC0xCBF43926
CRC-32/ISCSI0xE3069283
CRC-32/BZIP20xFC891918
CRC-32/MPEG-20x0376E6E7
CRC-32/CKSUM0x765E7680

이름만으로는 값이 정해지지 않습니다.

“CRC-16을 쓴다”는 말은 아무것도 정하지 않은 것입니다. 같은 폭이라도 다항식·초기값·반사 여부·XOR 값이 다르면 전혀 다른 값이 나옵니다. 위 목록에서 CRC-16/ARC · MODBUS · USB 셋은 다항식(0x8005)까지 같은데 초기값과 XOR만 달라 값이 완전히 다릅니다. 상대 쪽과 값이 안 맞으면 이 다섯 가지를 하나씩 맞춰 보세요.
반사는 수학이 아니라 역사입니다. 반사는 비트 순서를 뒤집는 것인데, 하드웨어 시프트 레지스터가 비트를 어느 쪽부터 밀어 넣느냐에서 갈라진 차이일 뿐 수학적인 이유가 없습니다. 그런데도 값은 완전히 달라집니다. CRC-32/ISO-HDLC와 CRC-32/BZIP2는 다항식·초기값·XOR이 모두 같고 반사 여부만 다른데, 같은 데이터에서 전혀 다른 값이 나옵니다.
CRC는 보안용이 아닙니다. 전송이나 저장 중에 저절로 생기는 오류를 잡는 것이 목적이라, 일부러 내용을 바꾸면서 CRC까지 맞춰 놓는 것은 아주 쉽습니다. 위변조를 막아야 한다면 SHA-256 같은 암호학적 해시나 HMAC을 쓰세요.
출처. Greg Cook의 CRC RevEng 카탈로그 (reveng.sourceforge.io/crc-catalogue)에서 널리 쓰이는 14가지를 옮겼습니다. 모든 변종이 카탈로그의 검산값과 맞는지 테스트로 확인합니다. 계산은 모두 브라우저 안에서 이뤄지고 입력값은 서버로 전송되지 않습니다.

사용 방법

  1. 1글자로 넣을지 16진수로 넣을지 고릅니다.
  2. 2데이터를 넣습니다. 16진수는 공백·콜론·하이픈으로 끊어도 됩니다.
  3. 3변종을 고릅니다. 상대 쪽과 맞춰야 할 규격이 있다면 그것을 고르세요.
  4. 4아래 목록에서 모든 변종의 값을 한눈에 견줍니다.

자주 묻는 질문

데이터를 아주 긴 이진수로 보고 정해진 다항식으로 나눈 나머지입니다. 받는 쪽이 같은 나눗셈을 해서 나머지가 맞으면 도중에 바뀌지 않은 것으로 봅니다. 전송이나 저장 중에 저절로 생기는 오류를 잡는 것이 목적입니다.

"CRC-16"은 이름일 뿐 값을 정하지 않기 때문입니다. 다항식·초기값·반사 여부·마지막 XOR 다섯 가지가 모두 같아야 값이 같습니다. CRC-16/ARC · MODBUS · USB는 다항식(0x8005)까지 같은데 초기값과 XOR만 달라 전혀 다른 값이 나옵니다.

비트 순서를 뒤집는 것입니다. 하드웨어 시프트 레지스터가 비트를 어느 쪽부터 밀어 넣느냐에서 갈라진 역사적 차이일 뿐 수학적인 이유는 없지만, 값은 완전히 달라집니다. CRC-32/ISO-HDLC와 CRC-32/BZIP2는 반사 여부만 다른데 결과가 전혀 다릅니다.

"123456789"를 넣어 보세요. CRC 카탈로그가 모든 변종에 대해 이 문자열의 정답을 함께 적어 두었습니다. CRC-32는 0xCBF43926, MODBUS는 0x4B37이 나와야 합니다. 다른 도구와 값이 다를 때 무엇이 틀렸는지 가리는 데 가장 빠른 방법입니다.

안 됩니다. 내용을 일부러 바꾸면서 CRC까지 맞춰 놓는 것은 아주 쉽습니다. 위변조를 막아야 한다면 SHA-256 같은 암호학적 해시나 HMAC을 쓰세요.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • Greg Cook의 CRC RevEng 카탈로그(reveng.sourceforge.io/crc-catalogue)에서 널리 쓰이는 14가지를 옮겼습니다.
  • 모든 변종이 카탈로그의 검산값("123456789"의 정답)과 맞는지 테스트로 확인합니다.
  • 글자 입력은 UTF-8 바이트로 계산합니다. 한글 한 글자는 3바이트입니다.
  • MD5·SHA 해시가 필요하면 해시 생성기를 보세요.

함께 보면 좋은 도구

마지막 검증: 2026년 8월 30일 · 결과는 참고용 추정치입니다.