よろずやIT
プログラミング

Base64とは|暗号化ではない理由と、メール・JWT・画像で使われる場面

執筆・監修:よろずやIT編集部|編集方針を見る

結論:まずここだけ読めばOK

詳しい手順・原因は、この下で解説しています。

プログラミングのイラスト

結論: Base64は、データを、64種類の文字(英大文字・小文字・数字・「+」「/」)だけで表す方式です。**暗号化ではありません。**鍵が要らず、誰でも元に戻せるため、**秘密を守る目的では、使えません。**メールの添付や、画像の埋め込みなど、「文字しか扱えない場所に、データを通す」ために使われます。

Base64とは

コンピューターのデータは、本来、0と1の並び(バイナリ)です。ところが、メールや、JSON、URLなど、文字しか安全に扱えない場所があります。そこで、バイナリを、英数字だけの文字列に変換する方式が、Base64です。

たとえば、「Hello」は、次のようになります。

元のデータ Base64
Hello SGVsbG8=

暗号化ではない理由

Base64は誰でも元に戻せる変換で、暗号化は鍵がないと戻せないことを比べた図解

Base64の変換の規則は、**公開されています。**鍵も、秘密も、ありません。「SGVsbG8=」を見た人は、ツールで、すぐに「Hello」に戻せます。

方式 元に戻せる? 鍵 主な目的
Base64 誰でも戻せる なし 文字だけの形にして、通す
暗号化 鍵を持つ人だけ あり 内容を、守る
ハッシュ化 戻せない なし 照合、パスワードの保存(ハッシュ化とは)

パスワードやAPIキーを、Base64にして「隠した」つもりになるのは、危険です。

仕組み:3バイトを4文字に

  1. データを、3バイト(24ビット)ずつに区切る
  2. 24ビットを、6ビットずつ、4つに分ける
  3. 6ビット(0〜63)を、64種類の文字のどれかに置き換える
  4. 端数が出た時は、**「=」**で埋める(パディング)

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」の場合があります。本物のパスワードや、秘密のデータを、外部の変換サイトに貼り付けないでください。

注意すること

まとめ

関連記事:パスワードのハッシュ化とは、APIキーとは、JSONとは、SSL/TLSとは

SHAREXLINEはてブ

よくある質問

Q.Base64で変換すれば、データは安全になりますか?

A.いいえ。Base64は、暗号化ではなく、表し方を変えるだけの方式です。鍵が要らず、専用のツールや、数行のコードで、誰でも元に戻せます。秘密を守りたい場合は、暗号化や、ハッシュ化を使います。

Q.Base64とハッシュ、暗号化は、何が違いますか?

A.Base64は、誰でも元に戻せる、形式の変換です。暗号化は、鍵を使って、元に戻せる人を限定します。ハッシュ化は、元に戻せない、一方向の変換で、データの照合や、パスワードの保存に使います。

Q.なぜ、サイズが増えるのですか?

A.3バイト(24ビット)を、6ビットずつ4つに分けて、4文字で表すためです。3バイトが、4文字になるので、約4/3(約33%増)になります。端数を埋める「=」も加わります。

Q.「Basic認証」は、Base64なので、安全ではないのですか?

A.HTTPのBasic認証は、「ユーザー名:パスワード」を、Base64にして送ります。Base64は暗号化ではないため、通信が暗号化されていないと、盗み見で、元に戻されます。必ず、HTTPSと組み合わせて使います。

Q.URLに使えるBase64は、ありますか?

A.通常のBase64は、「+」と「/」を使いますが、URLでは、特別な意味を持ちます。そのため、「+」を「-」に、「/」を「_」に置き換えた、URL向けの形式(Base64URL)があります。JWTなどで使われます。

関連記事

最新のIT関連書籍 トップ10

PR / 楽天市場の売れ筋ランキングを定期的に取得しています。価格は変動する場合があるため、購入前に各ストアでご確認ください。