인코딩

JWT Encoder/Decoder

JWT 토큰 인코딩 및 디코딩 — 헤더, 페이로드, HMAC 서명, 표준 클레임.

A JWT (JSON Web Token) is a compact format for transmitting signed data, made of three dot-separated parts: a header, a payload, and a signature. This tool decodes any JWT and shows all three parts, and can also build a new token signed with HMAC.

Decoding does not verify the signature — reading a token's contents needs no secret key. Verifying the signature only matters when you need to trust the token as genuine.

How to use it

Common uses

Things to keep in mind

A JWT is not encrypted, only Base64URL-encoded — anyone can read the payload. Never put passwords or other secrets in it.

The signature protects against tampering, not against being read. For confidentiality you need extra encryption (JWE) or an HTTPS transport.

이 도구에 대한 아티클: JWT: 토큰 구조와 JWT를 "디코딩"한다는 것의 의미

자주 묻는 질문

JWT를 디코딩하면 서명도 검증되나요?

아니요. 디코딩은 Header와 Payload에 담긴 클레임을 base64url 디코딩해서 보여줄 뿐이며, secret이나 공개키를 입력하지 않으면 서명이 진짜인지는 검증하지 않습니다. 즉 토큰 내용을 볼 수는 있어도 그 자체로 위조 여부를 증명하지는 못합니다.

이 도구에 secret이나 키를 입력해도 안전한가요?

네, 모든 인코딩·디코딩·서명 검증 로직은 브라우저 안에서만 실행되며 secret, 키, 토큰 어느 것도 서버로 전송되지 않습니다. 다만 실제 운영 환경의 secret은 가급적 별도로 관리하는 것이 좋습니다.

exp, iat 같은 표준 클레임은 어떻게 해석하나요?

exp는 토큰 만료 시각, nbf는 이 시각 이전에는 유효하지 않음, iat는 발급 시각을 나타내며 모두 유닉스 타임스탬프(초)입니다. 이 도구는 exp를 현재 시각과 비교해 유효/만료 상태를 함께 보여줍니다.

알고리즘을 "none"으로 바꿔치기하는 공격이란 무엇인가요?

백엔드가 토큰 헤더의 alg 필드를 순진하게 신뢰하면, 공격자가 이를 none으로 바꿔 서명을 제거할 수 있고 임의의 데이터를 담은 토큰이 검증을 통과해버립니다. 신뢰할 수 있는 라이브러리는 검증 시 기대하는 알고리즘을 명시적으로 지정하도록 요구합니다.

민감한 세션에 JWT를 localStorage에 저장하면 왜 안 좋은가요?

localStorage는 페이지의 어떤 JavaScript 코드에서든 접근 가능해 XSS에 취약합니다 — 악성 스크립트가 토큰을 훔칠 수 있습니다. 세션 토큰에는 JavaScript에서 접근할 수 없는 httpOnly 쿠키를 사용하는 것이 더 안전합니다.

아티클: 인코딩

Base64: 인코딩이 필요한 이유와 작동 방식

Base64가 바이너리 데이터를 ASCII 텍스트로 바꾸는 방법과 실제로 언제 필요한지.

Base32: Base64와 다른 점과 더 편리한 경우

대소문자를 구분하지 않는 Base32 알파벳과 Base64보다 편리한 상황.

URL Encode/Decode: 링크에서의 퍼센트 인코딩

주소와 매개변수의 특수 문자가 %XX 시퀀스로 바뀌는 과정.

HTML Entities: 특수 문자를 안전하게 표시하는 방법

< > & 문자를 이스케이프해야 하는 이유와 이것이 마크업 손상을 막는 방법.

Unicode Escape: \uXXXX 시퀀스의 의미

JSON과 JS 문자열에 나타나는 \u0041 같은 시퀀스가 어디서 오는지, 무엇을 의미하는지.

ROT13과 시저 암호: 단순한 문자 치환

13글자 이동이 ROT13을 자기 역함수로 만드는 이유와 오늘날에도 쓰이는 이유.

Punycode: 국제화 도메인이 DNS에서 작동하는 방식

라틴 문자가 아닌 문자를 포함한 도메인이 xn-- 접두사가 붙은 ASCII 형식으로 바뀌는 과정.

모스 부호: 텍스트가 점과 선으로 바뀌는 원리

문자를 점과 선으로 인코딩하는 원리와 모스 부호가 오늘날 어디에 쓰이는지.

Data URI: 이미지를 코드에 직접 삽입해야 할 때

Data URI가 파일 내용을 HTML이나 CSS에 직접 삽입하는 방식과 그럴 만한 가치가 있는 경우.

Gzip + Base64: 텍스트로 전송하기 위한 데이터 압축

압축된 바이너리 데이터를 텍스트 필드에 넣기 전에 Base64로도 인코딩하는 이유.

XML Entities: XML 문서에서 문자 이스케이프하기

이것이 없으면 파싱 중 문서가 깨지는, XML의 다섯 가지 필수 엔티티.