エンコード・セキュリティ

Base64は暗号化ではない:エンコード・暗号化・ハッシュの違い

Base64が実際に行っていること、秘密を守れない理由、暗号化やハッシュとの違い、テキストやファイルのエンコード・デコード手順を説明します。

公開日:

一言でいうと

Base64は、バイト列を英数字などの文字に置き換えて、テキストしか扱えない仕組みでもデータを運べるようにする方式です。誰でも元に戻せます。鍵も秘密もありません。

3つの違い

Base64(エンコード) 暗号化(AESなど) ハッシュ(SHA-256など)
目的 バイト列を文字で表す データを秘密にする 指紋・改ざんの確認
元に戻せるか 誰でも戻せる 鍵を持つ人だけ戻せる 戻せない
鍵 不要 必要 不要
主な用途 メール添付、データURL、JSONの値、トークン HTTPS、暗号化ファイル、パスワード管理 ダウンロードの確認、重複検出

設定ファイルに cGFzc3dvcmQxMjM= と書かれていても、守られたパスワードではありません。デコードするとそのまま password123 になります。

例:テキストをエンコード・デコードする

  1. Base64変換を開く。
  2. 「処理」で「エンコード」を選び、「入力の種類」は「テキスト」のまま hello と入力する。
  3. 「エンコードする」を押すと、結果は aGVsbG8= になります。
  4. 日本語などはUTF-8に変換してからエンコードします。こんにちは は 44GT44KT44Gr44Gh44Gv、안녕 は 7JWI64WV です。
  5. 元に戻すには「処理」を「デコード」にしてBase64を貼り付け、「デコードする」を押します。「結果を入力に戻す」で結果を入力欄へ移せます。

Base64の結果は元のデータより約3分の1大きくなります(3バイトが4文字になるため)。

例:ファイルをデータURLにする

小さなアイコンをHTMLやCSSに直接埋め込む場合:

  1. 「エンコード」を選び、「入力の種類」を「ファイル」にして画像を選ぶ。
  2. 「データURL形式にする」をオンにする。結果は data:image/png;base64,… で始まります。
  3. <img src="…"> や background-image: url(…) に貼り付ける。

小さなファイル向けの方法です。100KBの画像はページ内で約133KBの文字になり、別ファイルとしてキャッシュもされません。

URLセーフなBase64

標準のBase64は + と / を使いますが、これらはURLの中で特別な意味を持ちます。URLセーフ形式は代わりに - と _ を使い、末尾の = を省くのが一般的です。JWT(JSON Web Token)はこの形式です。エンコード時に「URLセーフ」をオンにします。デコード時はどちらの形式も自動で読み込みます。

本当に必要なのが別のものである場合

  • データを秘密にしたい:Base64ではなく、きちんとした鍵を使う暗号化(暗号化アーカイブやパスワード管理ソフトなど)を使います。
  • 自作アプリでパスワードを保存したい:Argon2、scrypt、bcryptなどのパスワード専用ハッシュ関数を使います。SHA-256を1回かけるだけでは不十分です。
  • ダウンロードしたファイルが改ざんされていないか確かめたい:ハッシュ値計算でSHA-256を求め、配布元の値と比べます。
  • 新しい強いパスワードが欲しい:パスワード生成を使います。

よくあるトラブル

  • デコードした文字が文字化けする:元のデータがテキストではない可能性があります(画像、ZIP、圧縮データなど)。テキストとして読まずに「ファイルとして保存」を使います。
  • 「不正な文字」のエラーが出る:コピー時に余計な文字が混ざっていないか、途中で切れていないかを確認します。
  • 文字が混在しているという警告が出る:入力に + / と - _ の両方が含まれています。別々のデータがつながっているかもしれません。
  • Basic認証のヘッダーに資格情報がある:Authorization: Basic dXNlcjpwYXNz は user:pass をBase64にしただけです。HTTPSでのみ安全に使えます。

← 使い方ガイド一覧へ