Base64とは何か、なぜ存在するのか
Base64はバイナリデータをテキストに変換するエンコード方式です。画像・アーカイブ・暗号鍵、その他の生のバイナリデータを取り込み、64種類の印刷可能な文字だけからなる安全なアルファベットで書き直します。具体的には大文字A〜Z(26文字)・小文字a〜z(26文字)・数字0〜9(10文字)・追加の記号2つ(通常は+と/)です。末尾のパディングには等号が使われます。生成されるすべての文字が通常のASCIIであるため、テキスト専用に設計されたシステムを介して安全に送信できます。
それがBase64が発明された理由です。電子メールに代表される古いプロトコルの多くは、運ぶコンテンツがテキストであることを前提としています。生のバイナリを渡すと、一部のバイトが壊れたり削除されたり制御文字として解釈されたりして、データが破損した状態で届きます。Base64はバイトをテキスト対応のチャンネルがそのまま通過させる形式に変換することで、この問題を回避します。元のデータは反対側で正確に復元できます。

変換の仕組み
仕組みはシンプルです。Base64は入力を3バイト(24ビット)のチャンクにグループ化し、その24ビットを6ビットずつ4つのグループに分割します。6ビットは64通りの値を表せるため、アルファベットがちょうど64文字である理由はここにあります。つまり3バイトの入力は常に4文字の出力になります。入力の長さが3の倍数でない場合、エンコーダーは最後のグループに1つまたは2つの=文字でパディングし、デコーダーが実際のデータの終端を認識できるようにします。
この4対3の比率が、よく知られたサイズ増加の原因でもあります。Base64の出力は元のデータより約33%大きくなります。電子メール標準でよく要求されるように、エンコードされたテキストが固定幅の行に折り返される場合、改行のために数パーセント追加されます。このオーバーヘッドは互換性を得るための代償であり、ほとんどの用途では妥当なトレードオフです。
Base64が登場する場面
コツを掴めば、日常のコンピューティングのあらゆる場所でBase64を見かけます。
- データURI。 小さな画像やフォントは
data:URIを使ってHTMLやCSSに直接埋め込めます。ファイルの内容がBase64で記述され、ブラウザがインラインでデコードするため、個別のネットワークリクエストが不要になります。 - メール添付ファイル。 ファイルをメールで送るための標準規格であるMIMEは、テキスト専用のメールシステムを通じてバイナリ添付ファイルを壊さずに運ぶためにBase64を活用しています。
- HTTP Basic認証。 おなじみの
Authorization: Basic ...ヘッダーは、コロンでつなげたユーザー名とパスワードをBase64エンコードしたものです。だからこそBasic認証は必ずHTTPS上で使う必要があります。 - トークンと設定。 JSON Web Token・証明書・SSHキー・無数の設定値は、コピー&ペーストやテキストベースのストレージを乗り越えられるようにBase64で保存または送信されています。
エンコードは暗号化ではない
これは最も重要な点であり、初心者にも経験豊富な開発者にも誤解されがちです。Base64は暗号化ではなく、まったくセキュリティを提供しません。秘密鍵もパスワードも、プライベートな要素は何もありません。変換は完全に公開されており、完全に可逆です。Base64文字列を見た人なら誰でも、まさにこのようなツールを使って1秒で元のバイトに戻すことができます。
Base64はパスワード・APIキー・機密情報の隠し場所としては不適切です。文字列が文字化けして見えるからといって、保護されているわけではありません。対照的に、暗号化は秘密鍵でデータを変換し、その鍵を持つ人だけが読めるようにします。両者は異なる問題を解決しています。暗号化は機密性を守り、Base64は互換性を守ります。よく一緒に使われます——AESでデータを暗号化し、暗号文をBase64エンコードしてテキストチャンネルを通過させる、というように。しかし一方が他方の代替にはなりません。

エンコードとデコード
2つの方向はシンプルな鏡像関係です。エンコードは元のテキストまたはバイナリを取り込んでBase64の文字列を生成します。デコードはBase64の文字列を取り込んで元の正確なバイトを復元します。このツールはいずれもブラウザ内で直接実行します。入力または貼り付けたものはサーバーに送信されないため、操作は完全にローカルでプライベートです。デバッグ中のトークンをデコードしたり、埋め込みたいスニペットをエンコードしたりしても、データはページの外に出ません。
関連する変換については、パーセントエンコーディング用のURLエンコード/デコードツール、またはトークン内のBase64セグメントを確認したい場合はJWTデコーダーをご覧ください。残りのデベロッパーツールと併せてお使いいただけます。
よくある質問
Base64は暗号化の一種ですか?
いいえ。Base64はエンコードであって暗号化ではありません。鍵を使わず、誰でも完全に元に戻せるため、セキュリティはまったく提供されません。機密データの保護にはAESやRSAなどの本物の暗号化を使用してください。
なぜBase64はデータを大きくするのですか?
Base64は入力3バイトを4文字の出力に変換するため、サイズが約33%増加します。出力が固定長の行に分割される場合、改行によってさらに数パーセント追加されます。
Base64はどの文字を使いますか?
標準のアルファベットは大文字26文字・小文字26文字・数字0〜9、さらにプラス記号とスラッシュ記号で構成され、末尾のパディングに等号が使われます。
パスワードをBase64で安全に保存できますか?
いいえ。Base64はデータの見た目を変えるだけで、誰が読めるかは変えません。誰でも瞬時にデコードできます。パスワードは強力なアルゴリズムでハッシュ化し、秘密情報は暗号化する必要があります。
このBase64ツールはプライベートですか?
はい。エンコードとデコードはすべてブラウザ内で行われます。入力したものはアップロードされたりサーバーに送信されたりしないため、データはご自身のデバイスに留まります。
エンコードとデコードの違いは何ですか?
エンコードは元のテキストまたはバイナリをBase64の文字列に変換します。デコードはその逆で、Base64の文字列を元の正確なバイトに戻します。両者は鏡像の操作です。
