파일 업로드
  1. base64hub
  2. 웹·토큰 도구
  3. Base64URL 디코더

Base64URL 디코더: URL-safe Base64 디코딩

토큰 세그먼트나 URL 파라미터 같은 URL-safe Base64 문자열을 붙여넣고 안에 든 내용을 읽으세요. -와 _ 문자는 자동으로 인식되고 빠진 = 패딩은 복원됩니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 자동 패딩 복원 업데이트 2026. 10. 27.
입력 0 B출력 0 B크기 –

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

Base64URL을 디코딩하는 방법

  1. 입력 · Base64에 문자열을 붙여넣으세요. 페이지를 열면 URL-safe 예시가 들어 있습니다.
  2. 출력 · 텍스트에서 결과를 읽으세요. 상태 표시줄에 변형(Base64URL 또는 Standard), 디코딩된 바이트 수, 감지된 유형이 나타납니다. 패딩이 빠져 있었다면 “누락된 패딩을 자동으로 추가했습니다.“라고 표시됩니다.
  3. 토큰에 흔히 들어 있는 JSON은 JSON 보기 좋게 정렬로 들여쓰기됩니다.
  4. 해시나 랜덤 ID 같은 바이너리 내용이면 도구가 바이너리 데이터라고 알려 주고 알맞은 디코더로 가는 링크를 보여 줍니다.
  5. 출력 복사나 다운로드로 결과를 가져가세요.

인코딩하려면 Base64URL 인코더를 사용하세요. Base64URL 문자열을 디코딩하지 않고 표준 Base64로 바꾸려면 Base64URL을 Base64로를 사용하세요.

예시

Base64URL디코딩 결과참고
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9{"alg":"HS256","typ":"JWT"}전형적인 JWT 헤더
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSIsImFkbWluIjp0cnVlfQ{"sub":"1234567890","name":"Ada","admin":true}JWT 페이로드, 패딩 복원됨
c3ViamVjdHM_X2Qsubjects?_d_는 URL-safe 버전의 /
8J-Riw👋-는 URL-safe 버전의 +
E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM바이너리 32바이트SHA-256 해시, RFC 7636의 PKCE 예시

마지막 행의 해시는 텍스트로 출력해도 의미가 없습니다. Base64를 Hex로에서 열면 13 d3 1e 96 ... 같은 바이트를 볼 수 있습니다.

패딩과 패딩을 복원할 수 있는 이유

Base64URL은 보통 = 없이 씁니다. 그래도 정보는 사라지지 않습니다. 올바른 문자열의 길이는 4n, 4n + 2, 4n + 3자 중 하나이고, 나머지를 보면 마지막 그룹에 바이트가 하나인지 둘인지 디코더가 알 수 있기 때문입니다. 도구는 디코딩 전에 빠진 =를 붙이고 상태 표시줄에 그 사실을 알립니다.

길이가 4n + 1인 경우는 있을 수 없습니다. “길이가 잘못되었습니다. 문자가 하나 많거나 적습니다.” 오류가 나오면 값을 복사할 때, 예를 들어 이메일이나 로그의 줄 바꿈에서 문자가 하나 빠지거나 더해진 것입니다. 계산 방법은 패딩 설명에 나와 있습니다.

많은 표준 디코더는 이보다 덜 관대합니다. 브라우저의 atob()는 -와 _를 InvalidCharacterError로 거부하고, Python의 base64.urlsafe_b64decode는 =가 없으면 Incorrect padding을 발생시킵니다.

토큰, 쿠키, URL 파라미터

  • JWT. 토큰은 xxxxx.yyyyy.zzzzz 모양입니다. 앞의 두 부분은 Base64URL JSON이고, 세 번째는 바이너리인 서명입니다. 여기서 부분을 하나씩 디코딩하거나, 토큰 전체를 JWT 디코더에 붙여넣으세요. JWT 디코더는 만료 시각도 보여 주고 서명도 검증합니다. 형식은 JWT 속 Base64에서 설명합니다.
  • 쿠키와 세션 ID. Flask 같은 일부 프레임워크의 세션 쿠키는 Base64URL 데이터와 서명을 점으로 이어 붙입니다. 데이터 부분만 디코딩하세요.
  • URL 파라미터. OAuth state, 리디렉션 대상, 공유 링크에 Base64URL JSON이 담기기도 합니다. 값에 %2F나 %2B가 있다면 그 위에 퍼센트 인코딩이 한 번 더 된 것이므로 먼저 URL 디코딩이 필요합니다.

문자열에 -나 _가 +나 /와 섞여 있으면 디코더는 “입력에 표준(+ /) 문자와 URL-safe(- _) 문자가 섞여 있습니다"라며 멈춥니다. 대개 두 값이 합쳐졌거나 하나가 일부만 변환된 경우입니다.

코드에서 Base64URL 디코딩

// Node.js
Buffer.from("c3ViamVjdHM_X2Q", "base64url").toString("utf8");   // "subjects?_d"

// Browsers with Uint8Array.fromBase64
new TextDecoder().decode(Uint8Array.fromBase64("c3ViamVjdHM_X2Q", { alphabet: "base64url" }));
import base64

def b64url_decode(s: str) -> bytes:
    return base64.urlsafe_b64decode(s + "=" * (-len(s) % 4))

b64url_decode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9")   # b'{"alg":"HS256","typ":"JWT"}'

이 패딩 처리 줄은 Base64로 유효한 모든 입력 길이에 맞게 작동합니다. 자세한 내용은 Node.js에서 Base64, JavaScript, Python에 있습니다.

자주 묻는 질문

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

위에 붙여넣기만 하면 되고 따로 설정할 것은 없습니다. 코드에서는 -를 +로, _를 /로 바꾸고 길이가 4의 배수가 될 때까지 =를 붙인 뒤 일반 Base64로 디코딩하거나, Node의 Buffer.from(s, "base64url") 같은 URL-safe 디코더를 쓰세요.

"." 문자 때문에 오류가 나는 이유는 무엇인가요?

JWT 전체를 붙여넣었기 때문입니다. JWT의 세 부분은 점으로 구분되며 각 부분을 따로 디코딩해야 합니다. 한 부분만 붙여넣거나, 토큰 전체는 JWT 디코더를 사용하세요.

Base64URL 문자열인데 상태 표시줄에 Standard라고 나오는 이유는 무엇인가요?

문자열에 -, _, +, /가 하나도 없어서 두 알파벳 모두에서 유효하고 어느 쪽으로 디코딩해도 결과가 같기 때문입니다. JWT 헤더 중 상당수가 그렇습니다.

값이 아직 퍼센트 인코딩되어 있으면 어떻게 하나요?

인코딩된 =(%3D)는 처리됩니다. %2F 같은 다른 이스케이프가 있다면 값이 URL 인코딩을 거쳤다는 뜻이므로 먼저 URL 디코더로 처리하세요.