Base64는 암호화가 아닙니다
SGVsbG8sIFdvcmxkIQ== — 이런 문자열을 보면 암호처럼 보입니다.
하지만 Base64는 비밀을 지키는 기술이 아니라, 바이너리 데이터를 «글자만 통과하는
통로»로 보내기 위한 표기법입니다. 이 오해 때문에 실제 보안 사고가 나기도 합니다.
무엇이고 무엇이 아닌지 정리합니다.
왜 이런 게 필요했나
초기 인터넷의 이메일은 7비트 ASCII 텍스트만 안전하게 전달하도록 설계됐습니다. 사진이나 실행 파일 같은 바이너리를 그대로 실으면 중간에서 깨졌습니다. 그래서 어떤 바이트든 64개의 안전한 글자(A–Z, a–z, 0–9, +, /)만으로 다시 적는 방법이 만들어졌고, 이것이 Base64입니다. 지금도 쓰임새는 같습니다 — JSON·HTML·URL처럼 «텍스트만 담는 그릇»에 바이너리를 실어야 할 때 씁니다.
동작 원리 — 3바이트를 4글자로
바이트는 8비트, Base64 글자 하나는 6비트(2⁶ = 64가지)를 표현합니다.
그래서 3바이트(24비트)를 6비트씩 네 조각으로 잘라 글자 4개로 적습니다.
입력이 3의 배수로 안 떨어지면 끝을 = 기호로 채웁니다 —
Base64 문자열 끝에 =가 자주 붙는 이유입니다. 3바이트가 4글자가 되므로
용량은 원본의 약 4/3, 즉 33%쯤 늘어납니다. 압축이 아니라 오히려 팽창입니다.
어디서 만나나
- 데이터 URI —
data:image/png;base64,...형태로 이미지를 HTML·CSS 안에 직접 심을 때. - 이메일 첨부(MIME) — 첨부 파일은 지금도 Base64로 실려 갑니다.
- JWT 토큰 — 헤더·페이로드가 base64url로 적혀 있습니다. URL에 안전하도록
+를-로,/를_로 바꾼 변형입니다. - HTTP Basic 인증 —
아이디:비밀번호를 Base64로 적어 보냅니다. 인코딩일 뿐이라 가로채면 그대로 읽히므로, 반드시 HTTPS 위에서만 써야 합니다.
암호화와 뭐가 다른가
암호화는 키가 없으면 못 되돌리는 변환입니다. Base64는 키가 없습니다 — 규칙이 공개된 표기법이라 누구나, 어떤 도구로든 1초 만에 원문으로 되돌립니다. 그래서 비밀번호를 Base64로 바꿔 저장하거나, 개인정보를 Base64로 «가려서» 보내는 것은 아무것도 보호하지 않습니다. 겉보기에 읽을 수 없어 보인다는 점이 오히려 «처리된 것 같은» 착시를 줘서 위험합니다. 숨겨야 하는 값이라면 암호화(전송은 HTTPS, 저장은 검증된 암호화 방식)를 써야 하고, Base64는 그 결과물을 «적는 방법»으로만 쓰세요.
직접 해 보기
Base64 인코딩/디코딩에서 한글·이모지를 넣어 인코딩해 보고, 결과 길이가 원본보다 얼마나 늘어나는지도 확인해 보세요. base64url 변형도 함께 디코딩됩니다. JWT 안의 base64url이 실제로 어떻게 쓰이는지는 JWT 토큰 안에는 무엇이 들어 있나에서 다룹니다.
참고·출처
최종 검토: 2026-09-01