Base64URLとBase64の違い|文字・Padding・変換方法を比較
この記事の要点
- Base64URLは
+と/を-と_へ置き換えた形式です。 - URLやJWTではBase64URLが適し、Paddingを省略する仕様が多くあります。
- 2文字の置換とPaddingの調整で標準Base64と相互変換できます。
Base64URLとBase64の違い
Base64URLは、標準Base64をURLやファイル名で安全に扱えるよう調整した形式です。データを6ビット単位で文字へ置き換える基本的な仕組みは同じですが、URLで特別な意味を持ちやすい+と/を使いません。
| 比較項目 | 標準Base64 | Base64URL |
|---|---|---|
| 文字62 | + | - |
| 文字63 | / | _ |
| Padding | =を付けるのが一般的 | 省略する仕様が多い |
| 主な用途 | メール、Data URL、一般的なデータ交換 | URL、JWT、ファイル名、Web API |
使用文字が異なる理由
URLでは+が空白として扱われることがあり、/はパスの区切りとして使われます。そのままURLへ含めると、URLエンコードが必要になったり、受け取り側で別の意味に解釈されたりします。
Base64URLは+を-へ、/を_へ置き換えるため、クエリ、パス、Cookie、ファイル名などへ組み込みやすくなります。
Padding「=」の扱い
標準Base64は出力を4文字単位にそろえるため、末尾に=または==を付けます。Base64URLではURLを短くし、=の扱いによる問題を避けるため、Paddingを省略する仕様が多くあります。
省略ルールは仕様ごとに確認
Base64URLだから必ずPaddingなし、とは限りません。JWTなど対象の仕様に従い、受け取り側が省略を許容するか確認してください。
Base64とBase64URLを相互変換する方法
標準Base64からBase64URLへ
+を-へ置き換えます。/を_へ置き換えます。- 仕様に応じて末尾の
=を削除します。
Base64URLから標準Base64へ
-を+へ置き換えます。_を/へ置き換えます。- 文字数が4の倍数になるまで末尾へ
=を補います。
変換例
標準Base64:++//
Base64URL:--__
用途による使い分け
| 利用場面 | 推奨形式 | 理由 |
|---|---|---|
| Data URL | 標準Base64 | 一般的なData URLの形式に合わせる |
| メール添付 | 標準Base64 | MIMEの仕様で広く利用される |
| JWT | Base64URL | URLで安全な文字とPaddingなしを使用する |
| URLパラメータ | Base64URL | 追加のURLエンコードを減らせる |
| ファイル名 | Base64URL | パス区切りの/を含まない |
よくあるエラーと確認点
- 不正な文字:標準Base64のデコーダーへ
-や_を渡していないか確認します。 - Padding不足:デコーダーが省略を許容しない場合、4文字単位になるよう
=を補います。 - 文字コード違い:日本語はエンコード側とデコード側でUTF-8など同じ文字コードを使います。
- JWTの誤解:JWTのペイロードは暗号化されておらず、Base64URLデコードで読めます。
よくある質問
Base64URLは標準Base64と互換性がありますか?
文字の置換とPaddingの補完を行えば相互変換できますが、そのままでは別形式として扱われる場合があります。
Base64URLではPaddingを必ず省略しますか?
必ずではありませんが、多くの仕様では末尾のPaddingを省略します。利用する仕様に従ってください。
JWTは標準Base64を使いますか?
JWTはURLで安全に扱えるBase64URLを使い、通常はPaddingを付けません。
Base64URLは暗号化ですか?
いいえ。Base64URLもエンコード方式であり、内容を秘密にする機能はありません。