Base64 における「エンコード」と「デコード」の意味は?
Base64 へのエンコード (「encode base64」) はバイト — 通常は UTF-8 でエンコードされたテキストのバイト — を、64 個の許可文字の列に変換します:大文字 26 文字、小文字 26 文字、数字 10 文字、そして + と /. Base64 のデコード (「decode base64」) はまさにその逆の処理です:文字列を 4 文字ずつ読み取り、各文字が 6 ビットを表し、24 ビットから 3 バイトが得られます。人々が「encode and decode base64」と検索するとき探しているのが、この往復です。
Base64 は圧縮でも暗号でもありません:テキストは約 3 分の 1 長くなり、誰でも 1 秒で読めます。その役割は、安全な ASCII 文字しか受け付けないチャネル — URL、HTTP ヘッダー、設定ファイル、JSON、インライン SVG、メール、テキスト型データベース — でバイトを運ぶことにあります。
テキストを Base64 にエンコードする方法
ステップ 1:まず選択した文字セットでテキストをバイトに変換します — 既定は UTF-8 ですが、Latin-1、Windows-1252、ASCII、UTF-16 もレガシーデータで役立ちます。ステップ 2:バイトを 3 つずつ、つまり 24 ビット読み取ります。ステップ 3:この 24 ビットを 4 つの 6 ビットブロックに分け、各ブロックをアルファベットの該当位置の文字に置き換えます。ステップ 4:最後のグループが不完全な場合は 0 ビットで埋め、文字列を 1 つまたは 2 つの = (padding)で締めくくります。
具体例:「 AB 」は 10 進で 65、次に 66、つまり 01000001 01000010。3 バイトに補完すると: 01000001 01000010 00000000。4 つの 6 ビットグループは 010000 010100 001000 000000 → 位置 16、20、8、0 → QUI=。エンコーダーに「AB」と入力するだけ:キーを離す前にも結果が表示されます。
Base64 をテキストにデコードする方法
デコードでは、改行や余分な空白を取り除いてから文字列を 4 文字のグループで読み取ります。各文字を 6 ビットの値に置き換え、4 つの値を 24 ビットに連結し、その 24 ビットを 3 バイトに分割します。末尾の = は、最後のグループに有効なバイトがいくつあるかを示します:1 つ = は 2 バイト、2 つ = は 1 バイトを意味します。
文字列に - または _ が含まれていれば URL-safe 変種です:ツールは自動的に + と / に変換してからデコードします。padding が欠けている場合は「padding を修正」ボタンで復元できます。アルファベット外の文字、位置のずれたタブ、4 の倍数でない長さの場合は、「無効」とだけでなく理由を明示してエラーが表示されます。
URL-safe 変種(RFC 4648 §5)
標準の Base64 は + と /、この 2 文字は URL で問題になります: + はほとんどのサーバーで空白として解釈され、 / はパス区切りと間違えられます。URL-safe 変種はこれらを - と _ に置き換え、エスケープは不要です。次の場所では必須です: JWT (トークンの 3 セグメントは padding なしでエンコードされます)、 cookie、 識別子 、および URL パラメータ。
padding「=」は何のため?
Base64 は 4 文字のグループで処理しますが、ファイルサイズが 3 の倍数になることはほぼありません。padding が期待どおりの長さを復元します:残り 1 バイトなら ==、残り 2 バイトなら =。一部のシステムはこれを削除します(ある種の API、Base64URL)、一方で必要なシステムもあります(PHP、古いデコーダー)。エンコーダーの「padding なし」オプションとデコーダーの「padding を修正」ボタンが、その両方に対応します。
文字エンコード:UTF-8・Latin-1・UTF-16
Base64 は文字を知らず、バイトしか知りません。したがって決定的なのは:テキストを Base64 にする 前に 何でエンコードするかということです。UTF-8 では「é」は 2 バイトで「日」は 3 バイト、Latin-1 では「é」は 1 バイトに収まりますが「日」は表現できません。Latin-1 でエンコードした文字列を UTF-8 でデコードすると、文字化け(「mojibake」)になります。オンラインツールで結果が読めない場合、ほとんどは元のエンコードが違うのが原因です — だからここでは 6 つの選択肢を用意しています。
ファイル・data URI・Base64 の画像
この data URI の形は data:<MIME タイプ>;base64,<データ> です。画像を CSS・HTML・JSON に直接埋め込めます: background-image:url(data:image/png;base64,iVBOR…)。デコードするには、文字列全体を「ファイル ⇄ Base64」タブに貼り付けてください:MIME タイプが抽出され、ファイル名が提案され、ファイルが復元されてダウンロードできます。サイズには注意:Base64 は約 33 % 増え、data URI は単独ではキャッシュされません。
Base64 と URL エンコード、混同しない理由
この percent-encoding (%20, %C3%A9)は、許可されていないバイトをすべて%表記に置き換えます:Base64 の 2〜3 倍長ですが、目視では元のテキストが保たれます。Base64 はコンパクトで均一な文字列を生み、ブロブに最適ですが人間には読めません。「URL & data URI」タブでは 2 つの変換を並べて扱えるため、エスケープすべき URL を Base64 でエンコードしてしまうというよくあるミス — あるいはその逆 — を避けられます。
日常のフォーマットにおける Base64
Base64 はあらゆる場所で使われています: JWT の 3 セグメント、インライン SVG 画像の src 属性、PDF の cert フィールド、メール(RFC 2045)の attachments MIME 添付、API の Authorization: Basic (utilisateur:motdepasse)、 .pem ファイルと SSH 鍵、 .docx と .xlsx (ZIP)の中身、クライアント側ストレージのアバター、そして data- 属性(自動テスト用)。エンコードとデコードを素早くこなせば、1 つの文字列のためにターミナルを開く必要はなくなります。
Base64 ではないもの
Base64 は何も暗号化しません:エンコードされた文字列は 1 行のコードで復号できます。パスワード、API キー、個人情報を保護する手段として決して使わないでください。圧縮でもありません:常に 33 % のサイズ増を見込んでください。また、Base64 はすでに高密度な圧縮バイナリ(PNG、ZIP)には数 MB 以上向いておらず、その規模ではメモリコストが重くなります。
パフォーマンスとベストプラクティス
ブラウザーでは、 TextEncoder と TextDecoder が毎秒数 MB を処理します。Base64 アルゴリズム自体は線形で、再帰も文字ごとの割り当てもありません。5 MB を超えるファイルでは UI が重くなることがあります:より大きなバッチは Web Worker かサーバー側での処理を。常に元のエンコードを文字列のそばに記録し、結果をデータベースに保存する前にラウンドトリップ(エンコードしてからデコード)をテストしてください。
こんな方におすすめ
バックエンド/フロントエンド開発者(トークン、data URI、HTTP ヘッダー)、統合担当と技術ライター(インライン SVG、背景画像)、システム管理者と DevOps(証明書、鍵、ダンプ)、テスターとペネトレーションテスター(Authorization Basic、パラメータのファジング)、学生(バイト・ASCII・UTF-8 を理解したい方)、そして オンライン Base64 エンコーダー / デコーダー を、高速・多機能・確実なプライバシー保護で使いたいすべての方へ。