Base64 디코더로 건너뛰기

RFC 4648 §5 · base64url

Base64URL 디코딩, 패딩 복구까지.

JWT, URL 매개변수, WebAuthn 챌린지, Gmail API 등의 URL-safe Base64를 붙여 넣으면 -와 _를 되돌리고 빠진 = 패딩을 채워 디코딩합니다. JSON Web Token 전체를 붙여 넣으면 헤더와 페이로드가 표로 풀립니다.

업데이트 · 전부 브라우저에서 실행

Base64URL 디코딩 도구

0자
디코딩 결과
형식: — 크기: 0 B
옵션
일반
디코딩 옵션

Ctrl+Enter 디코딩 Ctrl+Shift+C 결과 복사 입력란에 파일을 끌어다 놓으면 불러옵니다

Base64URL을 디코딩하는 방법

  1. 01

    base64url 값 붙여 넣기

    URL-safe Base64 문자열이나 전체 JWT를 붙여 넣으세요. - 와 _ 문자, 빠진 패딩은 자동으로 처리됩니다.

  2. 02

    디코딩 결과 확인

    일반 값은 텍스트나 바이트로 디코딩됩니다. JWT는 헤더와 페이로드로 나뉘고, iat·nbf·exp는 날짜로 표시됩니다.

  3. 03

    복사하거나 계속 디코딩

    JSON을 복사하거나 정렬하세요. 페이로드에 또 인코딩된 값이 있으면 입력으로 보내기를 누르세요.

Base64와 Base64URL의 차이

표준 Base64는 URL과 파일 이름에서 의미가 있는 +와 /를 쓰고, 쿼리 문자열에서 퍼센트 인코딩해야 하는 =로 패딩합니다. RFC 4648 5절에 정의된 Base64URL은 이 문자들만 바꿔서 값이 URL 안에서 그대로 전달되게 합니다:

표준 Base64와 Base64URL의 차이
Base64Base64URL
값 62+-
값 63/_
패딩= 필수보통 생략
정의RFC 4648 §4RFC 4648 §5

나머지 62개 문자는 같으므로, 변환은 문자 교체와 패딩 추가뿐입니다.

빠진 패딩 복원하기

엄격한 디코더 상당수는 패딩이 없는 입력을 거부합니다. 패딩을 다시 붙이는 규칙은 문자열 길이를 4로 나눈 나머지에만 달려 있습니다:

  • 나머지 0 — 패딩 필요 없음
  • 나머지 2 — == 추가
  • 나머지 3 — = 추가
  • 나머지 1 — 올바른 Base64에서는 불가능하며, 값이 잘린 것입니다

이 디코더는 규칙을 자동으로 적용하고, 잘린 값은 조용히 엉뚱한 결과를 내는 대신 오류로 알려 줍니다.

base64url을 만나는 곳

  • JSON Web Token — 헤더, 페이로드, 서명은 점으로 이어진 세 개의 base64url 구간입니다. 서명은 보여 주지만 키가 필요하므로 검증하지는 않습니다.
  • WebAuthn과 패스키 — 챌린지, 자격 증명 ID, 클라이언트 데이터.
  • OAuth PKCE — code_challenge는 base64url로 인코딩한 SHA-256 다이제스트입니다.
  • Gmail API — 메시지 본문과 첨부 파일이 base64url로 인코딩되어 있습니다.
  • 짧은 ID와 토큰 — URL, 쿠키, 파일 이름 안에서 쓰입니다.

코드로 base64url 디코딩하기

# Python: urlsafe_b64decode still needs the padding back
import base64
def b64url_decode(s: str) -> bytes:
    return base64.urlsafe_b64decode(s + "=" * (-len(s) % 4))

// Node.js 16+
Buffer.from(token, "base64url").toString("utf8");

// Go
base64.RawURLEncoding.DecodeString(s)

// Java 8+: the URL decoder accepts unpadded input
Base64.getUrlDecoder().decode(s);

표준 Base64와 다른 언어는 기본 Base64 디코딩 페이지를 참고하세요.

다른 디코더

Base64를 디코딩하는 다른 방법

자주 묻는 질문

Base64URL 디코딩: 자주 묻는 질문.

Base64URL은 어떻게 디코딩하나요?

- 를 + 로, _ 를 / 로 바꾸고, 길이가 4의 배수가 될 때까지 = 패딩을 붙인 뒤 일반 Base64처럼 디코딩합니다. 이 페이지는 세 단계를 모두 자동으로 처리하므로 값을 붙여 넣기만 하면 결과가 바로 나타납니다.

Base64URL과 URL 인코딩은 같은 건가요?

아니요. URL 인코딩(퍼센트 인코딩)은 개별 문자를 %XX 형태로 이스케이프합니다. Base64URL은 바이트를 URL에 안전한 알파벳으로 바꾸는 Base64의 변형입니다. 값에 %2B나 %3D가 있다면 퍼센트 인코딩된 Base64이므로 먼저 퍼센트 인코딩을 풀어야 합니다.

이 도구로 JWT를 디코딩할 수 있나요?

네. 토큰 전체를 붙여 넣으면 헤더와 페이로드가 base64url에서 디코딩되어 표로 나타나고, 타임스탬프는 날짜로 바뀝니다. 서명은 보여 주지만 비밀 키나 공개 키가 필요하므로 검증하지는 않습니다.

Python에서 base64url을 디코딩하면 “Incorrect padding” 오류가 나는 이유는 무엇인가요?

base64.urlsafe_b64decode는 base64url에서 보통 생략하는 = 패딩을 요구합니다. 이 페이지의 예제처럼 디코딩 전에 문자열에 "=" * (-len(s) % 4)를 붙이세요.