CodeKitHub
인코딩 도구

CRC 계산기

마지막 업데이트:

CRC(순환 중복 검사)는 이진 필드에서의 다항식 나눗셈을 이용해 데이터 블록으로부터 계산되는 짧고 고정된 크기의 체크섬입니다. 의도적인 변조로부터 보호하기 위한 것이 아니라 우발적인 데이터 손상을 잡아내기 위한 것입니다. 이 계산기는 표준 테이블 기반 CRC 알고리즘을 사용해 체크섬을 브라우저에서 완전히 계산합니다. 텍스트를 붙여넣거나 작은 파일을 업로드하고, CRC-32(zip, PNG, 이더넷에서 사용되는 IEEE 802.3 다항식 0xEDB88320), CRC-16/CCITT-FALSE, CRC-16/MODBUS 중 하나를 선택하면 결과를 16진수, 10진수, 2진수로 즉시 얻을 수 있습니다. 입력한 내용은 서버로 전송되지 않습니다.

16진수
10진수
2진수

이 도구는 무엇인가요?

CRC는 Cyclic Redundancy Check(순환 중복 검사)의 약자로, 1975년 W. Wesley Peterson과 D.T. Brown의 논문에서 처음 기술된 오류 검출 코드이며, 이후 Ross Williams의 「A Painless Guide to CRC Error Detection Algorithms」와 ITU-T/ISO 3309 표준과 같은 문헌에서 공식화되었습니다. CRC는 메시지를 하나의 큰 이진수로 취급하고 이를 고정된 생성 다항식으로 나눕니다. 이 나눗셈의 나머지가 체크섬이 됩니다. 다항식 나눗셈은 하드웨어와 소프트웨어 모두에서 계산 비용이 저렴하기 때문에, CRC는 저장 및 전송 시스템에서 기본적인 오류 검사 방식이 되었습니다.

CRC-32——구체적으로는 다항식 0xEDB88320, 초기값 0xFFFFFFFF, 최종 XOR 0xFFFFFFFF를 사용하는 변형——은 IEEE 802.3(이더넷)에서 표준화되어 있으며, ZIP과 gzip 아카이브, PNG 이미지 파일, 그리고 수많은 네트워크 및 저장 프로토콜 내부의 체크섬으로 사용됩니다. 가장 널리 요청되는 CRC 변형이기 때문에 이 도구의 기본 알고리즘으로 설정되어 있습니다. CRC-16/CCITT-FALSE(다항식 0x1021)와 CRC-16/MODBUS(다항식 0x8005, 반전)는 Modbus RTU, XMODEM 등 다양한 임베디드/산업용 통신 표준과 같은 시리얼 프로토콜에서 널리 사용되는 두 가지 16비트 변형입니다.

CRC가 무엇이 아닌지 이해하는 것이 중요합니다. CRC는 암호학적 해시가 아닙니다. CRC는 빠르고 선형적인 함수로, 의도적인 조작에 대한 저항성이 전혀 없습니다. 동일한 CRC 값을 생성하는 다른 메시지를 만드는 것은 어렵지 않습니다. CRC는 잡음이 많은 전송 회선, 디스크 오류, 잘린 다운로드 등으로 인한 무작위 비트 반전을 잡아내는 데는 뛰어나지만, 데이터를 몰래 변조하려는 공격자로부터는 전혀 보호해주지 못합니다.

왜 사용해야 할까요?

  • 공장 전력 모니터링 시스템의 Modbus RTU 모듈을 디버깅 중인데 PLC가 보낸 프레임이 체크섬 오류로 수신 장치에서 거부될 때 — 프레임 페이로드를 CRC-16/MODBUS로 여기에 입력해 직접 계산한 값이 표준과 일치하는지 확인해보세요.
  • XMODEM으로 통신하는 국산 IoT 기기용 펌웨어를 개발 중인데 C 코드의 CRC-16/CCITT-FALSE 결과가 참조 라이브러리와 다를 때 — 같은 입력값을 여기 붙여넣어서 초기값 설정이 문제인지 비트 반전 순서가 문제인지 원인을 좁혀보세요.
  • 회사 네트워크로 대용량 ZIP 파일을 다운로드했는데 연결이 불안정해서 파일이 손상됐을까 걱정될 때, 프로덕션 서버에 압축을 풀기 전에 — 여기서 파일의 CRC-32를 확인하고 동료가 슬랙으로 보낸 체크섬과 비교해보세요.
  • 커스텀 PNG 파서를 만들고 있는데 특정 청크가 계속 CRC 검증에 실패할 때 — 해당 청크의 원시 바이트로 CRC-32를 다시 계산해서 문제가 원본 파일이 아니라 내 파싱 로직에 있는지 확인해보세요.
  • 다항식 나눗셈으로 CRC를 직접 계산해야 하는 네트워크 자격증 시험이나 데이터통신 과목 과제를 풀 때 — 손으로 계산하면 XOR 단계에서 실수하기 쉬우니, 제출 전에 이 도구로 답을 검증해보세요.
  • 팀에서 자체 제작 체크섬을 마이크로서비스 간 통신 프로토콜용 CRC-32 IEEE 802.3 표준으로 전환하는 중일 때 — 샘플 페이로드 몇 개를 여기 붙여넣어 양쪽 유닛 테스트의 기준이 될 참조값을 생성해보세요.

사용 방법

  1. "텍스트" 탭을 선택해 입력을 붙여넣거나 입력하거나, "파일" 탭으로 전환해 기기에서 파일을 선택하세요.
  2. CRC 알고리즘을 선택하세요: CRC-32(IEEE 802.3, 기본값이자 가장 일반적), CRC-16/CCITT-FALSE, 또는 CRC-16/MODBUS.
  3. 체크섬이 자동으로 업데이트되며 16진수, 10진수, 2진수로 표시됩니다.
  4. 결과 옆의 "복사"를 클릭하면 클립보드에 복사됩니다.

예시

입력

123456789

결과

0xCBF43926 (3421780262)

이것은 표준으로 공개된 CRC-32(IEEE 802.3) 테스트 벡터입니다. ASCII 문자열 "123456789"의 CRC-32는 항상 0xCBF43926입니다. 이 정확한 문자열을 사용해 다른 올바른 CRC-32 구현과 이 도구의 출력을 비교해볼 수 있습니다.

CRC와 암호학적 해시(MD5 / SHA) 비교

CRC와 암호학적 해시는 모두 데이터를 고정 크기의 지문으로 축소하지만, 서로 다른 문제를 해결하며 상호 교환할 수 없습니다.

속성CRC (예: CRC-32)MD5 / SHA-256
목적우발적인 손상 탐지의도적인 변조 탐지 / 무결성 검증
속도매우 빠름, 단순한 하드웨어/소프트웨어더 느림, 바이트당 더 많은 연산
충돌 저항성없음 — 의도적으로 만들기 쉬움계산상 사실상 불가능하도록 설계됨(SHA-256), MD5는 이미 깨짐
일반적인 크기16비트 또는 32비트128비트(MD5) 또는 256비트(SHA-256)
일반적인 용도ZIP/gzip, PNG, 이더넷, Modbus, 저장소파일 무결성 검사, 전자 서명, 비밀번호 저장(솔트 사용)

관련 도구

오류 검출용 CRC가 아니라 암호학적 체크섬이 필요하다면 아래 도구들이 더 적합합니다.

멀티 알고리즘 해시 생성기 · MD5 생성기 · HMAC 생성기

가장 흔한 CRC 오류 디버깅하기

CRC를 직접 구현할 때 가장 흔한 실수는 다항식 나눗셈 공식 자체가 아니라 자주 간과되는 세 가지 추가 매개변수에서 나옵니다: 레지스터 초기값(init value), 입력·출력 비트 반전 여부(reflected in/out), 그리고 계산 마지막에 적용하는 XOR 값입니다. 두 구현이 완전히 같은 다항식을 쓰더라도 이 세 매개변수 중 하나라도 맞지 않으면 체크섬이 달라집니다.

C, Python 등으로 CRC를 직접 구현하고 있다면, 정확성을 가장 빨리 확인하는 방법은 표준 테스트 벡터를 이용하는 것입니다. ASCII 문자열 "123456789"는 CRC-32 IEEE 802.3에서 항상 0xCBF43926이 나와야 합니다. 구현 결과가 이 값과 다르다면 다항식 나눗셈 로직보다는 앞서 말한 세 가지 숨은 매개변수 중 하나에 문제가 있을 가능성이 큽니다.

Modbus RTU 같은 시리얼 프로토콜에서는 프레임에 담기는 체크섬 바이트의 전송 순서도 흔한 버그 원인입니다. CRC-16/MODBUS는 하위 바이트를 먼저, 상위 바이트를 나중에 보내는 리틀 엔디안 순서를 쓰는데, 이는 보통 헥사값을 빅 엔디안으로 쓰는 습관과 다릅니다. CRC 값 자체는 맞는데 프레임이 계속 거부된다면 전송 바이트 순서부터 확인해보세요.

자주 묻는 질문

CRC는 무엇에 사용되나요?

CRC(순환 중복 검사)는 데이터 블록에 덧붙이는 오류 검출 코드로, 수신 측이 이를 다시 계산해 저장이나 전송 중 데이터가 우발적으로 손상되지 않았는지 확인할 수 있게 해줍니다. IEEE 802.3 이더넷 프레이밍, ZIP과 gzip 파일 형식, PNG 이미지, 그리고 Modbus와 같은 여러 시리얼 및 산업용 프로토콜에 내장되어 있습니다.

CRC-32는 MD5나 SHA-256과 같은 건가요?

아닙니다. CRC-32는 보안 속성이 전혀 없는 빠르고 선형적인 오류 검출용 체크섬으로, 동일한 CRC-32 값을 갖는 두 개의 서로 다른 입력을 의도적으로 만드는 것이 매우 쉽습니다. MD5와 SHA-256은 그런 의도적인 충돌을 계산상 사실상 불가능하게 만들도록 설계된 암호학적 해시 함수입니다. 스크래치가 난 디스크나 유실된 네트워크 패킷처럼 우발적인 손상을 잡아내려면 CRC-32를 사용하고, 공격자의 변조에 대한 위변조 감지나 무결성 보장이 필요하다면 [해시 생성기](/hash-generator)나 [MD5 생성기](/md5-generator)의 암호학적 해시를 사용하세요.

이 도구는 어떤 CRC-32 변형을 사용하나요?

IEEE 802.3 / ZIP / PNG 변형입니다: 다항식 0xEDB88320(0x04C11DB7의 비트 반전 형태), 초기값 0xFFFFFFFF, 입력과 출력 모두 반전, 최종 XOR 0xFFFFFFFF. 이는 이더넷, ZIP, gzip, PNG에서 사용되는 변형이며, ASCII 문자열 "123456789"에 대해 0xCBF43926을 생성하는, CRC-32 구현을 검증하기 위한 표준 공개 테스트 벡터입니다.

CRC-16/CCITT-FALSE와 CRC-16/MODBUS의 차이는 무엇인가요?

둘 다 16비트 CRC이지만 다항식과 매개변수가 다릅니다. CRC-16/CCITT-FALSE는 다항식 0x1021을 사용하며 초기값은 0xFFFF이고 비트 반전이 없습니다. XMODEM 등 여러 통신 표준에서 흔히 쓰입니다. CRC-16/MODBUS는 다항식 0x8005(반전 시 0xA001)를 사용하며 마찬가지로 초기값은 0xFFFF이지만 입력과 출력이 모두 반전됩니다. 이는 Modbus RTU가 모든 시리얼 프레임에 덧붙이는 체크섬입니다. 동일한 입력에 대해서도 서로 다른 결과를 생성하므로, 대상 프로토콜이 실제로 지정하는 변형을 선택하는 것이 중요합니다.

텍스트뿐만 아니라 파일의 CRC도 계산할 수 있나요?

네. "파일" 탭으로 전환해 기기에서 파일을 선택하면, 이 도구는 브라우저에서 로컬로(File API를 통해) 원시 바이트를 읽고 ZIP이나 PNG 리더와 동일한 방식으로 그 바이트들에 대해 체크섬을 계산합니다.

제 데이터가 서버에 업로드되나요?

아니요. 텍스트와 파일 계산 모두 표준 테이블 기반 CRC 알고리즘을 사용해 클라이언트 측 JavaScript에서 완전히 실행됩니다. 입력하거나 업로드한 내용은 브라우저를 벗어나지 않습니다.

입력값과 다항식이 같은데 왜 CRC 결과가 다르게 나오나요?

가장 흔한 원인은 자주 간과되는 숨은 매개변수들입니다. 레지스터 초기값(init value), 입력·출력 비트 반전 여부, 마지막에 적용되는 XOR 값이 그것입니다. 두 구현이 완전히 같은 다항식을 쓰더라도 이 세 가지 중 하나라도 일치하지 않으면 체크섬이 달라집니다 — 다항식만 확인하지 말고 하나씩 짚어보세요.

CRC를 비밀번호나 민감한 데이터 검증에 암호학적 해시처럼 사용해도 되나요?

전혀 권장하지 않습니다. CRC는 우발적인 손상을 탐지하도록 설계되었을 뿐, 의도적인 공격을 막도록 만들어지지 않았습니다 — 누구나 동일한 CRC 값을 갖는 다른 입력을 쉽게 만들어낼 수 있습니다. 비밀번호나 보안이 필요한 데이터에는 CRC-32나 CRC-16이 아니라 SHA-256 같은 암호학적 해시 함수를 사용하세요.

이 도구의 CRC-32는 PHP의 crc32() 함수나 Python의 zlib.crc32()와 같은 값을 내나요?

네 — 이 도구는 표준 IEEE 802.3 / ZIP 변형(다항식 0xEDB88320)을 사용하며, 이는 PHP 내장 crc32() 함수, Python의 zlib.crc32(), C의 zlib 라이브러리 CRC32 함수와 완전히 동일합니다. 결과를 그대로 대조해서 상호 검증할 수 있습니다.

CRC-16/MODBUS와 CRC-16/CCITT-FALSE는 둘 다 16비트이고 입력값도 같은데 왜 결과가 다른가요?

둘 다 16비트이지만 다항식과 비트 반전 설정이 완전히 다릅니다 — MODBUS는 다항식 0x8005를 쓰고 입력·출력 비트를 모두 반전하는 반면, CCITT-FALSE는 다항식 0x1021을 쓰고 비트 반전을 전혀 하지 않습니다. 그래서 막연히 "CRC-16"을 고르는 게 아니라 목표 프로토콜의 사양에 정확히 맞는 변형을 선택하는 것이 중요합니다.

관련 도구