XOR 암호화·키 추정 해독
키를 알면 ‘키로 XOR’, 모르면 ‘1바이트 키 찾기’나 ‘반복 키 찾기’를 고르세요. 결과는 글자와 16진수로 함께 보여 줘요.
XOR 암호는 어떻게 동작하나요
XOR(배타적 논리합)은 두 비트가 다르면 1, 같으면 0이 되는 계산이에요. 데이터의 각 바이트를 키 바이트와 XOR하면 암호가 되고, 같은 키로 한 번 더 XOR하면 원래 데이터로 돌아와요. 키가 데이터보다 짧으면 키를 처음부터 반복해서 써요(반복 키 XOR). 계산이 아주 빨라서 프로그램 안의 설정값이나 문자열을 가리는 데 자주 쓰이고, CTF(해킹 대회 연습 문제)와 악성코드 분석 공부에서도 자주 만나요.
키를 모를 때 찾는 방법
- 1바이트 키 찾기: 키가 한 바이트면 경우의 수가 256가지뿐이라 모두 풀어 보고, 결과가 영어 글처럼 보이는 정도(영어 글자 빈도, 띄어쓰기 비율, 읽을 수 있는 글자 비율)로 점수를 매겨 높은 순으로 보여 줘요.
- 반복 키 찾기: 키 길이를 1부터 최대값까지 바꿔 가며, 키 길이마다 데이터를 같은 키 바이트로 XOR된 묶음으로 나눠요. 각 묶음은 1바이트 XOR이라 위 방법으로 풀 수 있어요. 키 길이별로 나온 결과의 점수를 비교하고, 긴 키가 짧은 데이터에 억지로 맞춰지는 것을 막으려고 키 길이에 작은 벌점을 줘요. ‘ICEICE’처럼 반복되는 키는 ‘ICE’로 줄여 보여 줘요. 각 키 길이에 대해 이웃한 블록 사이의 정규화 해밍 거리도 계산하는데, 이것은 이 문제를 푸는 고전적인 방법이에요.
입력과 결과
데이터는 16진수(빈칸·0x 허용), Base64, 일반 글자로 넣거나 파일을 그대로 놓을 수 있어요. 키는 글자나 16진수로 넣어요. 결과는 UTF-8 글자로 읽히면 글자로, 아니면 읽을 수 없는 바이트를 점(.)으로 바꿔 보여 주고, 16진수와 .bin 파일로도 받을 수 있어요. 반복 키 찾기는 큰 파일일 때 앞 4,096바이트로 키를 추정하고 결과는 전체에 적용해요.
한계
자동 추정은 원래 데이터가 영어 글일 때 가장 잘 맞아요. 원래 데이터가 압축 파일이나 이미지처럼 무작위에 가까우면 점수로 고를 수 없어요. 이럴 때는 파일 머리(예: PNG는 89 50 4E 47)를 알고 있다면 ‘키로 XOR’에 그 값을 넣어 키 앞부분을 직접 구해 보세요. 키가 데이터만큼 길고 한 번만 쓰는 무작위 값이면(일회용 패드) 원리적으로 풀 수 없어요. 데이터는 서버로 보내지 않아요.
참고한 자료
자주 묻는 질문
결과 글자 칸에 점(.)이 많이 보여요.
결과가 글자가 아닌 바이트라서 그래요. 16진수 칸이나 .bin 파일로 확인하세요.
키 몇 글자만 틀리게 나와요.
데이터가 짧으면 일부 키 바이트가 대소문자나 비슷한 값으로 바뀌어 나올 수 있어요. 결과에서 틀린 위치를 보고 ‘키로 XOR’에서 키를 고쳐 넣으세요.
한글 글도 풀 수 있나요?
키로 XOR은 어떤 데이터든 돼요. 자동 추정은 영어 통계를 쓰기 때문에 한글 글은 잘 맞지 않을 수 있어요.
함께 쓰면 좋은 도구
- 헥스 뷰어 (파일 16진수 보기·검색, 헥스를 파일로)파일의 바이트를 16진수와 글자로 나란히 보고, 위치 이동·바이트 검색·파일 형식 확인, 16진수 글자를 파일로 저장
- Base64 인코딩·디코딩 (글자·파일 ↔ Base64)글자(한글 UTF-8)를 Base64로, Base64를 글자로, 파일·이미지를 data URI로, Base64를 파일로 저장
- 카이사르 암호·ROT13 풀기 (모든 이동 값 자동 해독)알파벳을 몇 칸씩 밀어 쓰는 카이사르 암호를 만들고, 이동 값을 몰라도 26가지를 모두 시도해 영어다운 답을 찾아 주기. ROT13·ROT47·ROT18 포함
- 파일 속 문자열 뽑기 (strings, 실행 파일·문서 속 글자 찾기)실행 파일·DLL·문서·펌웨어 같은 바이너리 파일 안에서 사람이 읽을 수 있는 글자만 위치(오프셋)와 함께 뽑기. ASCII·UTF-8 한글·UTF-16 지원
- JSON 정리 (보기 좋게 들여쓰기·검증·압축)JSON을 보기 좋게 들여쓰기, 오류 위치 표시, 한 줄 압축, 키 정렬, 문자열 이스케이프
- 정규식 테스트 (정규표현식 매칭 확인)패턴과 플래그로 일치하는 부분을 강조 표시, 그룹 값 표, 바꾸기 미리보기, 자주 쓰는 패턴