본문으로 건너뛰기
OpsKit

Base64 인코더 / 디코더

텍스트를 Base64로 바꾸고 되돌립니다. 한글 같은 비 ASCII 문자를 정확히 처리하고, JWT가 쓰는 URL-safe 알파벳을 지원하며, 결과가 텍스트가 아닌 바이너리일 때는 억지로 뭉개지 않고 그렇다고 알려줍니다.

출력

전부 브라우저 안에서 처리됩니다. 이 페이지는 정적 파일입니다. 입력한 내용은 탭 안에만 머물고 서버로 전송되지 않으며 창을 닫으면 사라집니다. 실제 토큰이나 설정을 붙여넣어도 안전합니다.

이럴 때 씁니다

  • 쿠버네티스 Secret을 확인할 때. kubectl get secret은 모든 값을 Base64로 보여줍니다.
  • 작은 이미지나 인증서를 설정 파일, 환경 변수, data URI에 끼워 넣을 때.
  • Authorization 헤더나 웹훅 페이로드, JWT 조각처럼 Base64로 넘어온 값을 열어볼 때.

실제 예제

일반 ASCII

입력
hello world
결과
aGVsbG8gd29ybGQ=

끝의 = 는 패딩이며 데이터의 일부가 아닙니다.

한글 텍스트

입력
안녕하세요
결과
7JWI64WV7ZWY7IS47JqU

한글 한 글자가 UTF-8 3바이트가 됩니다. btoa() 를 그대로 쓰는 도구는 여기서 예외를 던집니다.

JWT 헤더에 쓰이는 URL-safe

입력
{"alg":"HS256","typ":"JWT"}
결과
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

패딩도 없고 + 나 / 도 없어서 URL에 그대로 넣어도 깨지지 않습니다.

자주 틀리는 부분

Base64를 암호화로 착각하는 것

누구나 되돌릴 수 있는 인코딩일 뿐입니다. 쿠버네티스 Secret은 Base64로 인코딩된 것이지 보호된 것이 아닙니다. 위협 모델에서는 평문으로 취급해야 합니다.

URL-safe 값을 표준 디코더에 넣는 것

JWT 조각은 - 와 _ 를 쓰고 패딩이 없습니다. 엄격한 표준 디코더는 이를 거부합니다. 알파벳을 바꾸고 길이를 4의 배수로 맞춘 뒤 디코딩해야 합니다.

줄바꿈 한 글자 때문에 값이 달라지는 것

echo "secret" | base64 는 끝의 줄바꿈까지 인코딩합니다. 값이 정확히 일치해야 한다면 echo -n 이나 printf 를 쓰세요.

자주 묻는 질문

인코딩하면 왜 길이가 늘어나나요?

Base64는 3바이트를 4글자로 표현하므로 약 33% 커지고 패딩이 더 붙습니다. 바이너리를 텍스트 전용 통로로 보내기 위해 치르는 비용입니다.

운영 환경 시크릿을 붙여넣어도 되나요?

이 페이지는 정적 파일이고 변환은 탭 안의 자바스크립트에서 일어납니다. 전송되는 데이터가 없습니다. 입력하는 동안 브라우저 네트워크 탭을 열어두면 직접 확인할 수 있습니다.

터미널에서는 어떻게 하나요?

인코딩은 printf '%s' 'text' | base64, 디코딩은 base64 -d 입니다. macOS에서는 디코딩 옵션이 -D 입니다. URL-safe가 필요하면 | tr '+/' '-_' | tr -d '=' 를 덧붙이세요.

관련 도구