Base64URL エンコーダー・デコーダー

テキスト、16進数のバイト列、ファイルを URL セーフな Base64 に変換し、元に戻します。アルファベットには + と / の代わりに - と _ を使い、JSON Web Token や OAuth PKCE と同様に、パディングはデフォルトでオフになっています。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. 「エンコード」または「デコード」を選択します。「種類」はあらかじめ URL セーフが選択され、パディングはオフになっています。
  2. テキストを入力または貼り付けるか、16進数のバイト列を入力するか、ファイルを開きます。結果は入力に合わせてリアルタイムに更新されます。
  3. 受信側のシステムが末尾の = を必要とする場合にのみ、「パディング」をオンにします。
  4. 結果をコピーまたはダウンロードします。

Base64URL とは

Base64URL は、RFC 4648 の第 5 節で「Base 64 Encoding with URL and Filename Safe Alphabet」(URL とファイル名で安全なアルファベットによる Base64 エンコード)として定義されています。1 文字あたり 6 ビットという仕組みは標準の Base64 とまったく同じですが、URL やファイルパスで問題を起こす 2 つの文字を置き換えています。

標準 Base64Base64URL
値 62+-
値 63/_
パディング=(必須)通常は省略

URL の中では、+ はスペースとして解釈されることがあり、/ はパスの区切り、= はクエリのキーと値の区切りに使われます。そのため、標準の Base64 をリンクに含めるにはパーセントエンコードが必要ですが、Base64URL ならエスケープは不要です。RFC 4648 では、文脈から長さが分かる場合にパディングを省略することが認められており、Base64URL を採用しているほとんどの仕様が実際に省略しています。

Base64URL の用途

  • JSON Web Token。JWT のヘッダー、ペイロード、署名は、それぞれパディングなしの Base64URL です(RFC 7515)。JWT デコーダーで中身を確認できます。
  • OAuth 2.0 PKCE。code_challenge は、コード検証子(code verifier)の SHA-256 ハッシュをパディングなしの Base64URL で表したもの(RFC 7636)なので、常に 43 文字になります。
  • JSON Web Key と WebAuthn。n、e、x、y などの鍵パラメーターや、WebAuthn のチャレンジ、クレデンシャル ID は Base64URL でやり取りされます。
  • トークン、ID、ファイル名。パスワードリセット用のリンク、署名付き URL、キャッシュキーでは、Base64URL をエスケープせずにそのまま使えます。16 バイトのランダムな ID は 22 文字になります。Base64URL は大文字と小文字を区別するため、大文字と小文字を区別しないファイルシステムでは Base32 を使うことをおすすめします。

Base64 と Base64URL の相互変換

どちらの種類も同じバイト列をエンコードするため、変換は文字の置き換えだけで済みます。+ を - に、/ を _ に置き換え、末尾の = を削除します。元に戻すには、文字を逆に置き換え、長さが 4 の倍数になるまで = を追加します。このページのデコーダーは、パディングの有無にかかわらず、どちらのアルファベットも受け付けます。

// Node.js 16 以降
Buffer.from(data).toString('base64url')
Buffer.from(str, 'base64url')

# Python(urlsafe_b64encode はパディングを残します)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

// Java
Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)

仕様

使用文字A-Z a-z 0-9 - _
出力サイズ3 バイトごとに 4 文字(約 133%)
パディング任意(通常は省略)
規格RFC 4648 第 5 節
大文字と小文字の区別あり

エンコード例

入力 (UTF-8)出力
Hello, World!SGVsbG8sIFdvcmxkIQ
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

よくある質問

Base64URL は、Base64 文字列を URL エンコードしたものと同じですか?
いいえ。標準の Base64 をパーセントエンコードすると、+、/、= が %2B、%2F、%3D に変換され、文字列が長くなります。Base64URL は別のアルファベットを使うため、エスケープはまったく必要ありません。この 2 つの形式は、変換しない限り相互に置き換えることはできません。
Base64URL にパディングは必要ですか?
受け取る側によって異なります。JWT、JSON Web Key、PKCE ではパディングを省略する必要がありますが、Python の urlsafe_b64encode や Java のデフォルトの URL エンコーダーはパディングを付加します。迷った場合は省略してください。このデコーダーはどちらの形式も受け付けます。
標準の Base64 デコーダーで Base64URL 文字列がエラーになるのはなぜですか?
厳密な標準デコーダーは - と _ を受け付けず、パディングを必須とするものもあります。文字を置き換え、長さが 4 の倍数になるよう = を追加するか、このページでデコードしてください。
PKCE のコードチャレンジを確認するにはどうすればよいですか?
チャレンジは、パディングなしの BASE64URL(SHA256(code_verifier)) です。このページで「出力形式」を「16進数」にしてデコードしてください。正しい値ならちょうど 32 バイトになり、検証子の SHA-256 ハッシュと比較できます。