RFC 4648 §5 · base64url
Base64URL デコード、パディング修復まで。
JWT、URL パラメータ、WebAuthn のチャレンジ、Gmail API などの URL セーフ Base64 を貼り付けると、- と _ を元に戻し、欠けた = パディングを補ってデコードします。JSON Web Token 全体を貼り付ければ、ヘッダーとペイロードが表に展開されます。
更新日 · すべてブラウザ内で動作
Base64URL デコードツール
JSON Web Token
オプション
Ctrl+Enter デコード Ctrl+Shift+C 結果をコピー 入力欄にファイルをドロップすると読み込めます
Base64URL をデコードする方法
- 01
base64url の値を貼り付ける
URL セーフ Base64 文字列または JWT 全体を貼り付けます。- と _ の文字や欠けたパディングは自動で処理されます。
- 02
デコード結果を確認する
通常の値はテキストまたはバイト列にデコードされます。JWT はヘッダーとペイロードに分けられ、iat・nbf・exp は日時で表示されます。
- 03
コピーまたはさらにデコード
JSON をコピーしたり整形したりできます。ペイロードにさらにエンコードされた値があれば「入力へ送る」を押します。
Base64 と Base64URL の違い
標準 Base64 は URL やファイル名の中で意味を持つ + と / を使い、クエリ文字列では
パーセントエンコードが必要な = でパディングします。RFC 4648 第 5 節で定義された Base64URL は、
これらの文字だけを入れ替え、値を URL の中でそのまま運べるようにしています:
| Base64 | Base64URL | |
|---|---|---|
| 値 62 | + | - |
| 値 63 | / | _ |
| パディング | = が必須 | 通常は省略 |
| 定義 | RFC 4648 §4 | RFC 4648 §5 |
残りの 62 文字は同じなので、変換は文字の入れ替えとパディングの追加だけです。
欠けたパディングを復元する
厳密なデコーダーの多くは、パディングのない入力を受け付けません。パディングを戻す規則は、文字列の長さを 4 で割った余りだけで決まります:
- 余り 0:パディングは不要
- 余り 2:
==を追加 - 余り 3:
=を追加 - 余り 1:正しい Base64 ではあり得ない。値が途中で切れている
このデコーダーはこの規則を自動で適用し、途中で切れた値は黙って誤った結果を返さずにエラーとして知らせます。
base64url が使われている場所
- JSON Web Token:ヘッダー、ペイロード、署名はドットでつながれた 3 つの base64url セグメントです。署名は表示しますが、鍵が必要なため検証はしません。
- WebAuthn とパスキー:チャレンジ、クレデンシャル ID、クライアントデータ。
- OAuth PKCE:
code_challengeは SHA-256 ダイジェストの base64url です。 - Gmail API:メッセージ本文と添付ファイルは base64url でエンコードされています。
- 短い ID やトークン:URL、Cookie、ファイル名の中で使われます。
コードで 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 としてデコードします。このページはこの 3 つを自動で行うので、値を貼り付けるだけで結果がすぐに表示されます。
Base64URL と URL エンコードは同じですか?
いいえ。URL エンコード(パーセントエンコード)は個々の文字を %XX の形にエスケープします。Base64URL は、バイト列を URL で安全に使えるアルファベットに変換する Base64 の一種です。値に %2B や %3D が含まれていれば、パーセントエンコードされた Base64 なので、先にパーセントエンコードを解除してください。
このツールで JWT をデコードできますか?
はい。トークン全体を貼り付けると、ヘッダーとペイロードが base64url からデコードされて表に表示され、タイムスタンプは日時に変換されます。署名は表示されますが、秘密鍵または公開鍵が必要なため検証はしません。
base64url を Python でデコードすると「Incorrect padding」になるのはなぜ?
base64.urlsafe_b64decode は、base64url では通常省略される = のパディングを必要とします。このページのコード例のように、デコード前に文字列へ "=" * (-len(s) % 4) を追加してください。