Base64 인코딩 · 디코딩

글자를 Base64로 바꾸거나 되돌립니다. 브라우저의 btoa는 라틴-1만 받아 한글을 그대로 넣으면 오류가 나는데, 여기서는 UTF-8로 먼저 바꿔 넘기므로 한글·이모지도 그대로 오갑니다.

방식

넣은 것은 기기를 벗어나지 않습니다. 브라우저 안에서만 처리하고 어디에도 보내거나 저장하지 않습니다.

Base64 는 암호화가 아닙니다

바이트 3개를 여섯 비트씩 넷으로 쪼개 A–Z·a–z·0–9·+·/ 예순넷 글자에 대응시키는 표기법입니다. 열쇠가 없으니 누구나 되돌릴 수 있고, 감추는 용도로 쓰면 안 됩니다. 쓰는 자리는 「글자만 지나가는 길」에 바이트를 실어야 할 때입니다 — 메일 첨부, JSON 안의 이진 자료, data: 주소로 박은 이미지, HTTP 기본 인증의 아이디:비밀번호 가 그렇습니다.

`=` 채움과 URL 안전 변형

넉 글자가 한 묶음이라 길이가 4의 배수가 되도록 끝을 = 로 채웁니다. URL 안전 변형은 +·/ 를 -·_ 로 바꾸고 이 채움을 뗍니다. 되돌릴 때는 어느 쪽이 와도 받습니다 — -·_ 를 되돌리고 모자란 = 를 세어 채운 뒤 풉니다. 그래서 채움이 떨어진 JWT 조각도 그대로 넣으면 됩니다. 76자마다 줄을 바꾼 메일 방식의 Base64 도 됩니다 — 공백과 줄바꿈은 무시하고 읽습니다.

한글이 오가는 길

브라우저의 btoa 는 바이트를 글자로 받는 함수라 라틴-1 밖의 글자를 주면 던집니다. 여기서는 UTF-8 로 먼저 바꿉니다 — 가 는 EA B0 80 세 바이트가 되어 넉 글자 6rCA 로 나옵니다. 되돌릴 때도 UTF-8 로 읽으므로, EUC-KR 로 만든 값을 넣으면 오류 대신 깨진 글자가 나옵니다. 이미지 같은 이진 자료도 마찬가지로 읽을 수 없는 글자로 풀리니, 이 도구는 글자에만 쓰세요.

되돌리기가 실패하는 입력

앞뒤 공백은 떼고 읽지만, 그 밖의 글자는 예순넷 글자와 -·_·= 뿐이어야 합니다. data:image/png;base64, 같은 머리말이 붙은 채로 넣으면 : 와 , 에서 걸리니 쉼표 뒤만 넣으세요. 따옴표로 감싼 값도 같은 이유로 실패합니다. 실패하면 되돌린 글 대신 Base64 가 아닌 것 같다는 말이 서고, 읽히기는 했는데 바이트가 UTF-8 이 아니면 오류 없이 깨진 글자가 나옵니다.

길이는 미리 셀 수 있습니다

바이트 셋이 넉 글자가 되므로 결과 길이는 바이트 수를 3으로 나눠 올림한 것의 네 배입니다. 한글 한 자는 UTF-8 로 정확히 3바이트라 한글만 있는 글은 넉 글자씩 떨어지고 = 가 붙지 않습니다 — 한글 은 7ZWc6riA 여덟 자입니다. URL 안전 방식은 채움을 떼므로 같은 글이 최대 두 자 짧습니다.

자주 묻는 질문

URL 안전 방식은 뭔가요?

Base64에 나오는 + 와 / 는 주소나 파일 이름에서 다른 뜻을 가져 문제가 됩니다. 그래서 - 와 _ 로 바꾸고 뒤의 = 를 떼는 변형을 씁니다. JWT가 이 방식입니다. 되돌릴 때는 둘 다 알아서 처리합니다.

한글이 깨집니다

다른 도구에서 만든 값이라면 그쪽이 UTF-8이 아닌 다른 인코딩을 썼을 수 있습니다. 이 도구는 넣을 때도 되돌릴 때도 UTF-8로 다룹니다.

주소에 넣을 Base64 는 다르다던데요?

+ 와 / 가 주소에서 다른 뜻을 갖기 때문에, 주소용 Base64 는 그 둘을 - 와 _ 로 바꿉니다. 끝의 = 도 떼는 경우가 많습니다. 받는 쪽이 어느 방식을 쓰는지 맞춰야 합니다.

Base64 로 바꾸면 왜 커지나요?

3바이트를 4글자로 옮기기 때문에 약 33% 늘어납니다. 이미지를 Base64 로 HTML 안에 박으면 파일 요청은 줄지만 문서가 그만큼 커지므로, 작은 아이콘이 아니면 득이 없습니다.

`data:` 주소를 통째로 넣었더니 실패합니다.

data:image/png;base64, 까지는 주소의 머리말이지 Base64 가 아닙니다. 쉼표 뒤부터 넣으세요. 다만 그 뒤가 이미지라면 되돌려도 읽을 수 없는 글자만 나옵니다 — 이 도구는 글자를 되돌리는 것이라, 그림으로 보려면 주소를 그대로 브라우저 주소창에 넣는 편이 빠릅니다.

붙여넣은 코드가 서버로 가나요?

가지 않습니다. 브라우저 안에서만 처리하고 어디에도 보내거나 저장하지 않습니다. 사내 설정 파일이나 운영 쿼리처럼 밖으로 내보내기 곤란한 것도 그래서 쓸 수 있습니다. 인터넷을 끊고도 동작합니다.