結論: Base64は、データを、64種類の文字(英大文字・小文字・数字・「+」「/」)だけで表す方式です。**暗号化ではありません。**鍵が要らず、誰でも元に戻せるため、**秘密を守る目的では、使えません。**メールの添付や、画像の埋め込みなど、「文字しか扱えない場所に、データを通す」ために使われます。
Base64とは
コンピューターのデータは、本来、0と1の並び(バイナリ)です。ところが、メールや、JSON、URLなど、文字しか安全に扱えない場所があります。そこで、バイナリを、英数字だけの文字列に変換する方式が、Base64です。
たとえば、「Hello」は、次のようになります。
| 元のデータ | Base64 |
|---|---|
| Hello | SGVsbG8= |
暗号化ではない理由
Base64の変換の規則は、**公開されています。**鍵も、秘密も、ありません。「SGVsbG8=」を見た人は、ツールで、すぐに「Hello」に戻せます。
| 方式 | 元に戻せる? | 鍵 | 主な目的 |
|---|---|---|---|
| Base64 | 誰でも戻せる | なし | 文字だけの形にして、通す |
| 暗号化 | 鍵を持つ人だけ | あり | 内容を、守る |
| ハッシュ化 | 戻せない | なし | 照合、パスワードの保存(ハッシュ化とは) |
パスワードやAPIキーを、Base64にして「隠した」つもりになるのは、危険です。
仕組み:3バイトを4文字に
- データを、3バイト(24ビット)ずつに区切る
- 24ビットを、6ビットずつ、4つに分ける
- 6ビット(0〜63)を、64種類の文字のどれかに置き換える
- 端数が出た時は、**「=」**で埋める(パディング)
3バイトが、4文字になるため、サイズは、約**4/3(約33%増)**になります。
どんな場面で使われるのか
| 場面 | 使い方 |
|---|---|
| メールの添付 | 画像やファイルを、文字として送る(MIME) |
| データURI | 小さな画像を、HTMLやCSSの中に、直接埋め込む(data:image/png;base64,...) |
| JWT | トークンの中身を、URLにも使える形(Base64URL)で表す |
| HTTPのBasic認証 | 「ユーザー名:パスワード」を、Base64にして送る(HTTPS必須) |
| JSONやAPI | バイナリのデータを、文字列として、やりとりする |
JWTの中身は、誰でも読めるので、秘密の情報を入れてはいけません。署名で、改ざんを検出する仕組みです。
自分で、変換してみる
| 環境 | 変換(エンコード) | 元に戻す(デコード) | ||
|---|---|---|---|---|
| Mac・Linux | `echo -n Hello \ | base64` | `echo SGVsbG8= \ | base64 -d` |
| PowerShell | [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("Hello")) |
[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("SGVsbG8=")) |
Macの古いバージョンでは、デコードのオプションが、「-D」の場合があります。本物のパスワードや、秘密のデータを、外部の変換サイトに貼り付けないでください。
注意すること
- **暗号化と、混同しない:**Base64の文字列は、「読めない」だけで、「守られて」はいない
- **サイズが増える:**大きなファイルを、Base64にすると、通信量や、保存量が、約3分の1増える
- **日本語や、特殊な文字:**元の文字コード(UTF-8など)を、そろえて、変換する
- **認証情報は、HTTPSとセットで:**Basic認証は、HTTPS以外で使わない(SSL/TLSとは)
まとめ
- Base64は、データを、英数字だけの文字列に変換する方式で、暗号化ではない
- 誰でも元に戻せるので、秘密を守る目的では、使えない
- 3バイトを4文字にするので、サイズは約33%増える
- メール添付・データURI・JWT・Basic認証などで使われる
- 秘密を守るなら、暗号化やハッシュ化を使う