인코딩 / 디코딩
입력하는 즉시 Base64, Base64URL, URL 퍼센트 인코딩, HTML 엔티티, 16진수를 인코딩하거나 디코딩합니다. UTF-8을 완벽히 지원합니다.
입력한 내용은 저장되지 않습니다. 같은 요청 안에서 변환되어 반환됩니다.
입력하는 즉시 Base64, Base64URL, URL 퍼센트 인코딩, HTML 엔티티, 16진수를 인코딩하거나 디코딩합니다. UTF-8을 완벽히 지원합니다.
입력한 내용은 저장되지 않습니다. 같은 요청 안에서 변환되어 반환됩니다.
로그 속 토큰, 리디렉션의 쿼리 문자열, &로 가득한 이메일 본문처럼 인코딩된 텍스트는 업무 곳곳에서 나타납니다. 여기에 붙여 넣고 형식을 고르면 입력하는 대로 인코딩 또는 디코딩 결과를 볼 수 있습니다.
JSON Web Token은 헤더, 페이로드, 서명의 세 Base64URL 부분을 점으로 이은 것입니다. 가운데 부분을 붙여 넣고 Base64URL을 선택해 디코딩하면 사용자 id와 만료 시각 exp(유닉스 타임스탬프 변환기로 읽을 수 있는 유닉스 타임스탬프) 같은 JSON 클레임이 보입니다. 디코딩은 검증이 아닙니다. JWT 페이로드는 누구나 읽을 수 있으며, 변조되지 않았음을 증명하는 것은 서버의 서명 검증뿐입니다.
공간을 아끼려고 일부 시스템이 패딩을 없앤 Base64는 엄격한 디코더에서 실패합니다. 이 도구는 빠진 = 기호를 채워 넣고 그 사실을 알려 줍니다. 많은 서버가 쿼리 문자열의 +를 공백으로 해석하므로, 인코딩하지 않고 링크에 붙인 Base64 값은 손상된 채 도착합니다. URL 구성 요소로 인코딩하거나 Base64URL을 사용하세요. 두 번 인코딩된 텍스트는 %2520이나 &처럼 보이며 두 번 디코딩해야 합니다.
Base64 디코딩은 공백과 줄바꿈을 무시하므로, 이메일처럼 여러 줄로 나뉜 값도 붙여 넣은 그대로 디코딩됩니다. Base64URL 디코딩은 + 와 / 도 받아들이지만 일반 Base64는 - 와 _ 를 거부하므로, JWT의 각 부분에는 Base64URL 옵션이 필요합니다. 16진수 디코딩은 공백, 콜론, 쉼표, 하이픈, 0x 접두사를 건너뛰므로 48:65:6c:6c:6f 와 0x48 0x65 모두 됩니다. URL 디코딩은 + 를 공백으로 바꾸므로, 실제 더하기 기호는 %2B 로 와야 합니다. HTML 인코딩은 & < > " ' 다섯 문자를 이스케이프하고, HTML 디코딩은 , … 같은 모든 HTML5 이름 엔티티와 루피 기호를 나타내는 ₹ 같은 숫자 엔티티를 이해합니다.
여기의 URL 인코딩은 쿼리 매개변수 하나 같은 단일 값을 인코딩하므로 예약 문자를 모두 이스케이프합니다. https://example.com/a b?x=1&y=2은(는) https%3A%2F%2Fexample.com%2Fa%20b%3Fx%3D1%26y%3D2이(가) 됩니다. 링크에 넣는 값만 인코딩하고, 링크 전체는 인코딩하지 마세요. ASCII 밖의 텍스트는 UTF-8 바이트로 인코딩됩니다. café ₹은(는) caf%C3%A9%20%E2%82%B9이(가) 되고, 16진수도 같은 바이트를 보여 줍니다. é는 c3 a9, ₹는 e2 82 b9입니다. user:pass의 Base64는 dXNlcjpwYXNz이며, HTTP Basic Authorization 헤더가 담는 값입니다(RFC 7617). 그래서 그 헤더를 본 사람은 누구나 비밀번호를 읽을 수 있습니다.
바이트는 UTF-8이었지만 인코딩되기 전에 어딘가에서 Latin-1이나 Windows-1252로 읽혔습니다. 여기서의 디코딩은 바이트를 있는 그대로 보여 주므로, 수정은 그것을 만든 시스템에서 해야 합니다.
최대 200,000자의 텍스트를 붙여 넣을 수 있습니다. 이미지 같은 바이너리 파일은 디코딩된 바이트를 다운로드 파일로 만들지 않고 16진수로 보여 줍니다.
아닙니다. Base64는 일반 텍스트만 받는 시스템을 통과할 수 있도록 바이트를 쓰는 방식만 바꿉니다. 누구나 디코딩할 수 있으니 비밀번호나 비밀 정보를 숨기는 데 절대 쓰지 마세요.
Base64URL은 "+"와 "/"를 "-"와 "_"로 바꾸고 보통 "=" 패딩을 생략하므로, 결과를 URL과 파일 이름 안에서 안전하게 쓸 수 있습니다. JSON Web Token이 이 방식을 사용합니다.
아니요. 같은 요청 안에서 변환해 돌려주며 데이터베이스나 로그에 기록하지 않습니다.
이 도구는 encodeURIComponent가 그대로 두는 ! ' ( ) 와 * 도 이스케이프합니다. 그래서 it's (50%) off!은(는) it%27s%20%2850%25%29%20off%21이(가) 됩니다. 두 형식 모두 디코딩하면 같은 텍스트가 되며, 쿼리 값 안에서 이 문자들을 이스케이프하는 것은 언제나 안전합니다. 공백은 +가 아니라 %20이 됩니다. + 형식은 HTML 폼 인코딩에서 온 것이고, 여기의 디코더는 둘 다 읽습니다.
Linux나 Mac에서는 echo -n 'Hello, World' | base64 를 실행하면 SGVsbG8sIFdvcmxk 가 나오고, echo 'SGVsbG8sIFdvcmxk' | base64 --decode 로 다시 텍스트로 되돌립니다. -n을 빼면 echo가 줄바꿈을 붙이고 그것까지 인코딩되어 SGVsbG8sIFdvcmxkCg== 가 됩니다. 두 도구의 결과가 다른 가장 흔한 이유입니다. PowerShell에서는 [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('Hello, World')) 로 인코딩하고 [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('SGVsbG8sIFdvcmxk')) 로 디코딩합니다. 이 페이지는 붙여 넣은 문자를 그대로 UTF-8로 인코딩하며 줄바꿈을 추가하지 않습니다.
쉼표 뒤의 부분만 붙여 넣으세요. data:image/png;base64,iVBORw0KGgo... 라면 iVBORw0KGgo... 부분입니다. data:image/png;base64, 접두사는 Base64가 아니어서 전체를 붙여 넣으면 거부됩니다. Base64와 Decode를 선택합니다. 텍스트가 아닌 바이트는 그림으로 그려지지 않고 16진수(hex)로 표시되지만, 파일 종류를 알아보기에는 충분합니다. PNG는 89 50 4e 47, JPEG는 ff d8 ff, .docx나 .xlsx 같은 ZIP 기반 파일 전체는 50 4b 03 04로 시작합니다. 이미지 자체를 보려면 data URI 전체를 브라우저 주소창에 붙여 넣으세요. 입력은 최대 200,000자로, 파일로는 약 150,000바이트입니다.
Base64는 3바이트마다 4개의 문자로 쓰고 마지막 묶음은 4의 배수가 되도록 =로 채웁니다(RFC 4648). 그래서 출력은 입력 바이트 수의 4/3을 올림한 길이입니다. Hello, World는 12바이트이고 16자의 SGVsbG8sIFdvcmxk가 됩니다. 세는 단위는 글자가 아니라 UTF-8 바이트입니다. café는 4글자지만 5바이트라 Y2Fmw6k=가 되고, ₹100은 6바이트라 4oK5MTAw가 됩니다. 한글 한 글자는 UTF-8에서 3바이트라서 한국어 텍스트의 Base64는 글자 수보다 훨씬 길어집니다. 이메일 첨부 파일은 조금 더 커지는데, MIME이 Base64를 한 줄 최대 76자로 줄바꿈하기 때문입니다(RFC 2045). 이 페이지는 디코딩할 때 그 줄바꿈을 무시합니다. 패딩 없는 Base64URL이 줄이는 것은 = 기호뿐입니다.