エンコード・セキュリティ
Base64は暗号化ではない:エンコード・暗号化・ハッシュの違い
Base64が実際に行っていること、秘密を守れない理由、暗号化やハッシュとの違い、テキストやファイルのエンコード・デコード手順を説明します。
公開日:
一言でいうと
Base64は、バイト列を英数字などの文字に置き換えて、テキストしか扱えない仕組みでもデータを運べるようにする方式です。誰でも元に戻せます。鍵も秘密もありません。
3つの違い
| Base64(エンコード) | 暗号化(AESなど) | ハッシュ(SHA-256など) | |
|---|---|---|---|
| 目的 | バイト列を文字で表す | データを秘密にする | 指紋・改ざんの確認 |
| 元に戻せるか | 誰でも戻せる | 鍵を持つ人だけ戻せる | 戻せない |
| 鍵 | 不要 | 必要 | 不要 |
| 主な用途 | メール添付、データURL、JSONの値、トークン | HTTPS、暗号化ファイル、パスワード管理 | ダウンロードの確認、重複検出 |
設定ファイルに cGFzc3dvcmQxMjM= と書かれていても、守られたパスワードではありません。デコードするとそのまま password123 になります。
例:テキストをエンコード・デコードする
- Base64変換を開く。
- 「処理」で「エンコード」を選び、「入力の種類」は「テキスト」のまま
helloと入力する。 - 「エンコードする」を押すと、結果は
aGVsbG8=になります。 - 日本語などはUTF-8に変換してからエンコードします。
こんにちはは44GT44KT44Gr44Gh44Gv、안녕は7JWI64WVです。 - 元に戻すには「処理」を「デコード」にしてBase64を貼り付け、「デコードする」を押します。「結果を入力に戻す」で結果を入力欄へ移せます。
Base64の結果は元のデータより約3分の1大きくなります(3バイトが4文字になるため)。
例:ファイルをデータURLにする
小さなアイコンをHTMLやCSSに直接埋め込む場合:
- 「エンコード」を選び、「入力の種類」を「ファイル」にして画像を選ぶ。
- 「データURL形式にする」をオンにする。結果は
data:image/png;base64,…で始まります。 <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でのみ安全に使えます。