viewer.csslab.dev

Base64 인코더 / 디코더

텍스트를 Base64 로 바꾸거나 되돌린다. 한글·이모지와 URL 안전 변형까지.

Base64 란?

Base64 는 이진 데이터를 인쇄 가능한 ASCII 64자로 표현하는 인코딩이다. 이메일 본문, JSON 필드, URL, HTTP 헤더, 데이터 URI 처럼 텍스트를 전제로 만들어진 통로에 바이트를 실어 보내려고 쓴다. 이 도구는 텍스트를 Base64 로 바꾸고 되돌리며, 표준 알파벳과 URL 안전 알파벳을 모두 다룬다.

암호화가 아니다. Base64 문자열은 누구나 되돌릴 수 있어 아무것도 숨기지 못한다. 임의의 바이트를 텍스트로 안전하게 옮기는 것이 전부다. 인코딩하면 크기가 3분의 1쯤 늘어나는데, 저장이 아니라 전송에 쓰는 이유가 여기 있다.

Base encoding of data is used in many situations to store or transfer data in environments that, perhaps for legacy reasons, are restricted to US-ASCII data.
RFC 4648 §1

기능

UTF-8 을 제대로 다룬다
인코딩 전에 텍스트를 UTF-8 바이트로 바꾼다. 한글도 이모지도 왕복해서 그대로 돌아온다. 브라우저의 btoa() 는 Latin-1 을 벗어나는 글자에서 그냥 예외를 던지는데, 다른 도구가 한글에서 깨지는 원인이 대개 이것이다.
URL 안전 알파벳
URL 안전 모드는 + 와 / 를 - 와 _ 로 바꾸고 패딩을 뗀다. RFC 4648 §5 가 정한 형태이고, JWT·JWK·쿼리 파라미터가 쓰는 형태다.
너그러운 디코딩
두 알파벳을 모두 받고, 값과 함께 붙어 들어온 줄바꿈과 공백을 무시하며, 떨어져 나간 패딩을 복원한다.
조용히 망가뜨리지 않는다
Base64 가 아니거나 디코딩한 바이트가 올바른 UTF-8 이 아니면 오류를 낸다. 대체 문자로 가득한 그럴듯한 문자열을 돌려주지 않는다.

사용법

  1. 1

    방향을 고른다

    텍스트를 Base64 로 바꾸려면 인코딩, Base64 를 텍스트로 되돌리려면 디코딩을 고른다.

  2. 2

    값을 붙여넣는다

    왼쪽에 붙여넣거나 입력하면 결과가 따라 바뀐다.

  3. 3

    URL 에 넣을 값이면 URL 안전 모드로

    쿼리스트링·경로·JWT 에 들어갈 값이면 URL 안전 인코딩을 쓴다. + 와 / 를 다시 이스케이프하지 않아도 된다.

  4. 4

    결과를 복사한다

    결과를 한 번에 클립보드로 가져간다.

자주 묻는 질문

Base64 는 암호화인가?

아니다. Base64 는 인코딩이지 암호가 아니다. 키가 없고 누구나 되돌릴 수 있다. 이진 데이터를 텍스트로 안전하게 옮길 뿐 보호하지는 않는다. 비밀번호나 토큰, 개인정보를 숨기는 데 쓰면 안 된다.

Base64 디코딩이 실패한다

Base64 알파벳에 없는 문자가 섞였거나(복사가 잘렸거나 URL 안전 값을 표준으로 디코딩하는 경우가 흔하다), 패딩까지 셌을 때 길이가 4의 배수가 아니거나, 디코딩한 바이트가 올바른 UTF-8 텍스트가 아닌 경우다. 이미지가 담긴 Base64 는 바이트로는 풀리지만 읽을 수 있는 텍스트가 되지는 않는다.

URL 안전 Base64 가 뭔가?

표준 Base64 가 쓰는 + 와 / 는 URL 안에서 다른 뜻을 가져 퍼센트 인코딩을 해야 한다. RFC 4648 §5 가 정한 URL 안전 변형은 대신 - 와 _ 를 쓰고 = 패딩을 대개 뗀다. JWT 는 모든 조각에 이 변형을 쓴다.

한글과 이모지도 되나?

된다. 먼저 UTF-8 바이트로 바꾸기만 하면 되고, 이 도구가 그렇게 한다. 브라우저의 btoa() 를 그대로 쓴 인코더는 U+00FF 를 넘는 글자에서 예외를 던지는데, 일부 온라인 도구가 한글에서 실패하는 이유가 그것이다.

Base64 로 바꾸면 얼마나 커지나?

3분의 1쯤 커진다. 3바이트가 4글자가 되고 패딩이 붙는다. 이 오버헤드 때문에 Base64 는 큰 파일을 저장하는 데가 아니라 JSON·이메일·데이터 URI 로 실어 보내는 데 쓴다.

입력이 서버로 가나?

가지 않는다. 인코딩과 디코딩 모두 사용자의 기기에서 자바스크립트로 처리된다. 내용을 받는 백엔드가 없어 토큰이나 내부 값도 안심하고 디코딩할 수 있다.

여기서 막힌다면

이 도구가 따르는 규격

함께 쓰는 도구