Base64 Encoder & Decoder (인코더 & 디코더)
텍스트와 파일을 Base64로 인코딩하고 디코딩합니다. 이미지는 미리보기와 data URI를 만들어 주고, 디코딩한 결과는 내용으로 형식을 알아내 알맞은 확장자로 저장합니다.
Base64가 하는 일
Base64는 아무 바이트열이나 글자만으로 적는 방법입니다. 3바이트를 4글자로 바꿔서, 글자밖에 담지 못하는 자리 — JSON 값, HTML 속성, 이메일 본문, 쿠키 — 에 이미지나 파일을 그대로 실어 보낼 수 있게 합니다.
암호가 아닙니다. 되돌리는 데 열쇠가 필요 없으니 감추는 용도로 쓰면 안 됩니다. 값을 옮기는 그릇일 뿐입니다.
크기는 약 1.33배로 늘어납니다. 3바이트가 4글자가 되기 때문입니다.
한글이 깨지지 않습니다
브라우저에 원래 있는 btoa()는 한 글자를 한 바이트로 가정합니다. 그래서 btoa('한')은 값을 내놓는 대신 예외를 던집니다.
이 도구는 글자를 먼저 UTF-8 바이트로 바꾼 뒤 그 바이트를 인코딩합니다. 한글도, 일본어도, 이모지도 넣은 그대로 돌아옵니다.
디코드할 때 형식을 알아냅니다
Base64 문자열은 자기가 무엇인지 말해주지 않습니다. 파일과 달리 이름도 형식도 없는 글자 뭉치입니다.
이 도구는 세 가지를 순서대로 시도합니다.
data:image/png;base64,처럼 data URI로 왔으면 거기 적힌 형식을 씁니다. 앞머리는 알아서 떼니 손으로 지울 필요가 없습니다- 바이트 앞머리의 표식을 읽습니다. PNG는
89 50 4E 47로, PDF는%PDF-로 시작하는 식으로 형식마다 고유한 표식이 있습니다 - UTF-8로 읽히면 내용을 봅니다. JSON·XML·HTML·SVG는 표식이 없어서 여는 괄호나 태그로 가릅니다
그래서 PDF를 디코드하면 .pdf로, JSON은 .json으로 저장됩니다. 셋 다 실패했을 때만 .bin입니다.
이미지로 알아본 것은 미리보기가 나옵니다.
붙여넣는 값을 고르지 않습니다
Base64에는 변형이 있습니다. 주소에 넣을 때는 +와 /가 URL에서 이미 다른 뜻이라 -와 _로 바꿔 씁니다. 끝의 =를 떼기도 합니다. JWT가 그렇게 합니다.
인코드는 늘 표준으로 합니다. 대신 디코드는 어느 변형이든 받습니다. 어디서 복사해 온 값인지는 붙여넣는 사람이 고를 수 있는 일이 아니기 때문입니다.
어디까지 되나
파일은 20 MB까지 받습니다. 그보다 크면 base64로 27 MB가 넘는 글자가 되어 브라우저가 감당하지 못합니다.
이미지 미리보기는 2 MB까지 만듭니다. 미리보기를 만들려면 그림을 글자로 바꿔 화면에 한 벌 더 들고 있어야 하기 때문입니다. 넘는 파일도 인코딩은 그대로 되고, 그림만 보이지 않습니다.
결과가 50만 자를 넘으면 앞부분만 화면에 그립니다. 다만 복사와 저장은 언제나 전체가 됩니다 — 화면에 다 보이지 않을 뿐 값이 잘린 것은 아닙니다.
파일을 넣는 두 가지 방법
원본 상자에 파일을 끌어다 놓거나, 오른쪽 위 파일 선택을 누르면 됩니다.
한 번에 하나만 다룹니다. 여러 개를 놓으면 첫 번째를 쓰고 그 사실을 알려줍니다.