PC・モバイルのトラブル

Base64は暗号化ではない:実際に何をするのか

Base64はエンコードであり、暗号化ではない。パスワードを隠せない理由、サイズが増える理由、デコードの仕方。

要点

Base64はエンコードであり、暗号化ではない。バイナリを、テキスト向きのシステムが保存・送信できる文字に変える。

Base64テキストを持っていれば、通常は誰でもデコードできる。パスワードも秘密鍵も不要。

パスワード、APIキー、アクセストークン、私信などの秘密を守るためにBase64を使わないこと。表現の道具であり、セキュリティ機構ではない。

文字列が読めなく見えても、暗号化されているとは限らない。Base64はバイトの書き方をテキストに変えるだけだ。

Base64は実際に何をするのか

Base64はバイナリを限られたASCII(A–Z、a–z、0–9、+、/)でエンコードする。出力長を4の倍数にするため、= によるパディングが付くことがある。パディングは必須ではない。短い入力では = が1つまたは2つ付き、省略する形式もある。

Hello

Hello

Base64

SGVsbG8=

SGVsbG8= をデコードすると再び Hello になる。この往復に鍵は要らない。

  • 元のデータ
  • Hello
  • Base64エンコード
  • SGVsbG8=
  • Base64デコード
  • Hello
Base64はデコードで可逆。テキストを持つ人は通常できる。

Base64と暗号化の違いは何か

Base64は表現と互換性のためのもの。内容は隠さない。暗号化は機密性のためのもので、暗号鍵材料を使う。Base64のデコードは復号ではない。公開鍵方式も鍵を使う。「あらゆる暗号化に一つの共有秘密」ではなく、「適切な暗号鍵」と言う。ハッシュは第三の考えで、可逆エンコードではないダイジェスト。

  • エンコード
  • 秘密鍵なし
  • 誰でも可逆
  • 暗号化
  • 暗号による保護
  • 復号には正しい鍵が必要
エンコードは表現を変える。暗号化は内容の機密を保とうとする。

三つの別の仕事:

方式 主な目的 秘密の要否
Base64 データをテキストとしてエンコード 不要
暗号化 機密性を守る 要 / 鍵材料
ハッシュ 一方向のダイジェスト 復号なし

Base64は安全か

Base64単体では機密性を与えない。不透明に見えても、それはセキュリティ機能ではない。通常のデコーダでバイトが戻る。だからといって「Base64は不安全な技術」ではない。普通のエンコードであり、セキュリティ機構ではない。安全は周囲のシステムと制御に依る。

パスワードやAPIキーをBase64で隠せるか

保護としては不可。パスワード、APIキー、アクセストークン、私的データをBase64にしても守られない。符号化文字列を得た人は通常デコードできる。機密が要るなら本物の秘密保管と暗号化を使う。

暗号化でないのにBase64はなぜ使われるのか

テキスト前提のシステムは生のバイナリを運べないことが多い。Base64はテキスト形式でのバイナリ表現、小さなバイナリの埋め込み、テキスト専用経路でのバイト転送、Data URLの構築、一部のメール/MIME、スキーマがBase64を求めるAPIペイロードに使われる。APIがBase64を使うのは「セキュリティのため」ではなく互換性のため。

なぜBase64はデータが大きくなるのか

標準のパディング付きBase64は入力3バイトを4文字にする。長さは 4 × ceil(n / 3)(nは入力バイト数)。3バイトは4文字、6バイトは8文字。大きな生ペイロードではおよそ33%、約3分の1増える。小さな入力はパディングで見え方が変わる。1バイトは QQ==(4文字)。JSONの引用符、Data URL接頭辞、圧縮、追加の転送符号化で保存・送信サイズはさらに変わる。Base64は圧縮しない。

Base64URLとは何か

Base64URLは同じエンコードの、URLとファイル名向けの変種であり、暗号化ではない。+ は - に、/ は _ になり、パディングはしばしば省略される。Base64エンコード・デコード は標準Base64とBase64URLの両方をエンコード・デコードできる。パディング規則は仕様による。このツールはJWTデコーダではない。

画像やファイルをBase64にできるか

できる。画像、PDF、その他のバイナリをBase64テキストにできる。Base64はそれらを圧縮しない。符号化テキストは生バイトより大きいのが普通。

Base64のData URLとは何か

Data URLはメディア種別、符号化の印、符号化バイトを一つの文字列にまとめられる:

data:image/png;base64,...

小さな資産には便利。大きなファイルをData URLに入れるのは常に良いとは限らない。文字列が伸び、ページが遅くなることがある。既定ではなくトレードオフとして扱う。

エンコード、暗号化、ハッシュ

エンコード(Base64を含む)は表現のためで、秘密なしに可逆。暗号化は機密性のためで、暗号鍵材料を伴う。ハッシュは一般に一方向として設計されたダイジェストを出す。出力長はアルゴリズム次第で、SHA-256とSHA-512は同じサイズではない。ハッシュ生成 はそのダイジェストを見せられるが、暗号化もBase64の代わりのエンコードもしない。

よくあるBase64の誤り

Base64を暗号化だと思う
バイトのテキスト上の見え方を変えるだけ。

秘密を素のBase64で保存する
持っている人なら符号化値をデコードできる。

Base64が圧縮すると考える
しない。テキスト形は通常より大きい。

サイズ増を忘れる
大きな生ペイロードではおよそ3分の1増を見込む。

Base64とBase64URLを混同する
字母が違う。デコーダは誤った変種を拒否することがある。

誤った文字符号化でデコードする
Base64はバイトを戻す。テキストには一致する符号化、通常はUTF-8がまだ要る。

= が常にあると思う
パディングは必要なときだけ。無い文字列もある。

UnicodeテキストがBase64で問題になる理由

Base64は文字ではなくバイトに働く。テキストは先にバイト化する。通常はUTF-8。韓国語、日本語、アラビア語、絵文字にはその段階が要る。ブラウザの btoa() はUnicode文字列で失敗しうる。Base64エンコード・デコード はUTF-8バイトをエンコードするので、そのテキストは往復できる。誤った文字集合でデコードすると、Base64は正しくても文字が崩れて見える。

錠ではない

Base64は機密性を与えない。符号化値を持つ人は通常デコードできる。乱れた見た目のテキストを守られた秘密と思わないこと。

ブラウザでBase64をエンコードまたはデコード

NEXNARA Base64エンコード・デコード はUTF-8テキストとファイルをローカルで変換する。

標準Base64とBase64URLのエンコード・デコード、ファイルから生Base64またはData URL、Base64やData URLからダウンロードに戻せる。無効入力は落ちずに拒否される。空白は無視され、足りないパディングは補われる。

10 MB超のファイルはタブが遅くなることがある。32 MB超はブラウザでは処理しない。

Base64処理自体はブラウザ内で行う。このツールではテキストやファイルをNEXNARAサーバーに送らない。広告や他のサイト機能はネットワークを使う。処理とは別。

Base64のエンコードやデコードが必要なら、Base64エンコード・デコード を開いてテキストを貼るかファイルを落とす。

FAQ

Base64は暗号化か

違う。Base64はエンコード。表現を変える。機密性は守らない。

Base64は安全か

Base64はセキュリティ機構ではない。普通のエンコード。テキストを持つ人は通常デコードできる。安全は残りのシステムに依る。

パスワードなしでBase64はデコードできるか

できる。標準デコーダで足りる。Base64自体にパスワードも秘密鍵も要らない。

なぜBase64はファイルサイズが増えるのか

標準のパディング付きBase64では3バイトが4文字になる(長さ 4 × ceil(n / 3))。大きな生ペイロードではおよそ33%増。ごく小さい入力ではパディングで比率が変わる。

Base64とBase64URLの違いは何か

Base64URLは + と / の代わりに - と _ を使い、= パディングをしばしば落とす。どちらもエンコード。Base64エンコード・デコード は両方の字母に対応する。

画像やファイルをBase64にできるか

できる。結果はテキストであり、より小さいファイルではない。生Base64やData URLには Base64エンコード・デコード のファイルモードを使う。ファイルはブラウザ内に留まる。

PC・モバイルのトラブル

なぜBase64にするとファイルが大きくなるのか

Base64はバイナリをだいたい3分の1ほど大きくします。3バイトが4文字になる構造、パディング、Data URLのオーバーヘッド、その増加が見合うときを確認します。

PC・モバイルのトラブル

スクリーンショットの JPG と PNG、どちらが小さい?

スクリーンショットは中身で JPG か PNG を選ぶ。UI と文字は PNG の方がシャープなことが多く、写真が多い画面は JPEG の方が小さくなることがある。

PC・モバイルのトラブル

JSON.parseが「Unexpected token」と言うのはなぜ?

テキストが有効なJSONでないとき、JSON.parseはUnexpected tokenを投げる。単引用符、末尾カンマ、HTML応答、エラー位置を切り分ける。

PC・モバイルのトラブル

画像をぼやけさせずにファイルサイズを減らす方法

見た目の品質を保ちながら、写真や画像のファイルサイズを減らします。過大なピクセルを先にリサイズし、ほどよい圧縮をかけ、合う形式を選びます。

PC・モバイルのトラブル

Unix Timestampを日付に変換:秒・ミリ秒とUTC

Unix timestampを日付へ変換する。秒とミリ秒、UTCとローカル時刻、ISO 8601、日付をepochへ戻す手順を説明する。