Base64를 hex로 변환하는 방법
- 입력 · Base64에 Base64를 붙여넣으세요. 줄 바꿈, 공백, 누락된
=패딩, URL-safe 문자를 모두 받습니다. - 출력 · Hex에 바이트가 나타납니다. 바이트가 알려진 형식과 일치하면 상태 표시줄에 감지된 파일 형식이 표시됩니다.
- 출력 아래에서 대소문자, 구분자, 줄당 바이트 수를 고르세요.
- 출력 복사를 누르거나 hex를 다운로드하세요. 바이트 저장은 디코딩된 바이트 자체를 파일로 씁니다.
반대 방향은 Hex → Base64 전환이나 Hex를 Base64로를 사용하세요.
출력 옵션
Base64 SGkh/w==는 4바이트를 담고 있습니다. 구분자 설정에 따라 다음과 같이 쓰입니다.
| 구분자 | 출력 | 용도 |
|---|---|---|
| 없음 | 486921ff | sha256sum 출력, 데이터베이스, URL과 비교 |
| 공백 | 48 69 21 ff | 바이트 단위로 읽기, hex 편집기 |
: | 48:69:21:ff | 인증서와 키 지문 |
0x | 0x48 0x69 0x21 0xff | C, C#, Java 상수 |
\x | \x48\x69\x21\xff | Python, C, 셸의 문자열 리터럴 |
대소문자를 바꾸면 48 69 21 FF가 됩니다. 줄당 바이트 수를 16으로 설정하면 한 행에 16바이트씩 익숙한 덤프 형태가 되어, 오프셋 0x40을 찾거나 헤더 길이를 세기 쉬워집니다.
첫 바이트 읽기
대부분의 파일 형식은 고정된 시그니처로 시작하며, hex로 보면 이런 시그니처를 쉽게 알아볼 수 있습니다. 몇 가지 Base64 접두사와 디코딩 결과는 다음과 같습니다.
| Base64 시작 부분 | Hex | 형식 |
|---|---|---|
iVBORw0KGgo | 89 50 4e 47 0d 0a 1a 0a | PNG |
/9j/ | ff d8 ff | JPEG |
JVBERi0 | 25 50 44 46 2d (%PDF-) | |
UEsDBA | 50 4b 03 04 (PK) | ZIP 및 DOCX, XLSX, JAR, APK |
H4sI | 1f 8b 08 | gzip |
첫 바이트가 이 중 어느 것과도 맞지 않는다면, 예상치 못한 문자 인코딩의 텍스트이거나 hex로 보면 균일하게 랜덤해 보이는 암호화된 데이터일 수 있습니다. 자주 보는 Base64 접두사 목록에 훨씬 많은 예가 있습니다. 데이터가 열어 보고 싶은 파일로 밝혀지면 Base64를 파일로에서 미리 보고 저장할 수 있습니다.
다이제스트와 체크섬 비교하기
체크섬 도구는 hex로 출력하므로, 헤더나 설정 파일의 값을 직접 실행한 md5sum이나 sha256sum과 비교하려면 Base64를 hex로 바꾸면 됩니다.
| 보이는 곳 | Base64 | Hex |
|---|---|---|
hello의 Content-MD5 헤더 | XUFAKrxLKna5cZ2REBfFkg== | 5d41402abc4b2a76b9719d911017c592 |
hello의 SHA-256 | LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ= | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
integrity="sha384-…" 속성, SHA256: 형식의 SSH 지문(패딩 없는 Base64), JSON 안의 바이너리 키도 마찬가지입니다. 두 값이 hex로 다르면 바이트가 다른 것이고, 같다면 Base64의 차이는 패딩이나 URL-safe 알파벳 같은 표기 차이일 뿐입니다.
코드에서 Base64를 hex로
import base64
base64.b64decode("SGkh/w==").hex() # '486921ff'
base64.b64decode("SGkh/w==").hex(" ") # '48 69 21 ff'
Buffer.from("SGkh/w==", "base64").toString("hex"); // '486921ff'
Python의 b64decode는 validate=True를 넘기지 않으면 알파벳 밖의 문자를 조용히 버리므로, URL-safe 문자열이 오류 없이 엉뚱한 바이트로 디코딩될 수 있습니다. Node의 "base64" 디코더는 두 알파벳을 모두 받습니다. 자세한 내용은 Python과 Node.js 페이지를 참고하세요.
자주 묻는 질문
Linux에서 Base64를 hex로 디코딩하려면 어떻게 하나요?
echo 'SGkh/w==' | base64 -d | xxd -p를 실행하면 486921ff가 출력됩니다. xxd -p는 30바이트마다 줄을 바꾸므로, 줄당 32바이트로 하려면 -c 32를 붙이고, xxd가 없다면 od -An -tx1을 쓰세요.
hex에 ef bf bd가 들어 있는 이유는 무엇인가요?
이 세 바이트는 대체 문자 �의 UTF-8 형태입니다. 어떤 도구가 Base64를 먼저 텍스트로 디코딩하면서 올바른 UTF-8이 아닌 바이트를 모두 바꿔 버린 것입니다. 이 페이지처럼 바로 hex로 디코딩하면 원래 바이트가 그대로 나옵니다.
hex는 Base64에 비해 얼마나 긴가요?
약 1.5배입니다. Base64 네 글자는 3바이트를 담고, 3바이트는 hex 숫자 여섯 자리가 됩니다. 44자짜리 SHA-256 값은 hex 64자리가 됩니다.
Base64URL과 data URI도 받나요?
네. -와 _는 +와 /처럼 읽고, 누락된 패딩도 괜찮으며, data:...;base64, 접두사는 건너뜁니다.