Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】What Is Base64? How Base64 Encoding Works

2026年10月16日に「Dev.to」が公開したITニュース「What Is Base64? How Base64 Encoding Works」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Base64は、画像やPDFなどのあらゆるバイナリデータを、メールやURLのようにテキストしか扱えないシステムで安全に送受信するため、64種類の安全な文字に変換するエンコード方式だ。元のデータより約1/3サイズは増えるが、データ破損を防ぎ、Webでのファイル埋め込み等で広く使われる。暗号化ではない点に注意が必要だ。

出典: What Is Base64? How Base64 Encoding Works | Dev.to公開日:

ITニュース解説

Base64は、コンピュータ上のあらゆる種類のデータ、例えば画像ファイル、PDF文書、あるいは様々な言語のテキストといったものを、ウェブやメールなどのシステムで安全に送受信するために考案された、データのエンコーディング方式の一つだ。多くのインターネットシステムは元々、特定の文字コードに準拠したテキストデータを扱うように設計されており、そのままではバイナリデータを破損させる可能性があった。そこで、Base64は、AからZの大文字、aからzの小文字、0から9の数字、そして記号の「+」と「/」の合計64種類の「安全な」文字だけを使って、どんなデータも表現できるようにすることで、この問題を解決する。これはRFC 4648というインターネット標準で詳しく定義されている技術だ。

Base64がどのようにデータを変換するのか、その仕組みを見てみよう。コンピュータはすべてのデータを「バイト」という単位で保存しており、1バイトは8つの「ビット」から構成されている。Base64エンコードでは、このバイトを3つずつまとめて処理する。3バイトは合計で24ビットになる。この24ビットを、次に6ビットずつ4つのグループに分割する。なぜ6ビットなのかというと、6ビットで表現できる数値は0から63まで(2の6乗=64通り)となり、これがBase64で使われる64種類の安全な文字それぞれに正確に対応するからだ。

具体例として、「Hi!」という文字列をBase64でエンコードする過程を追ってみよう。「H」、「i」、「!」という文字は、コンピュータ上ではそれぞれ「72」、「105」、「33」という数値のバイトとして表現される。これを2進数、つまりビットの並びで書くと、「01001000 01101001 00100001」となる。

次に、この24ビットを6ビットずつに区切る。 「010010」(最初の6ビット) 「000110」(次の6ビット) 「100100」(その次の6ビット) 「100001」(最後の6ビット)

これらの6ビットのグループをそれぞれ10進数の数値に変換すると、 「010010」は「18」 「000110」は「6」 「100100」は「36」 「100001」は「33」 となる。

そして、これらの数値がBase64の定義に従って、どの文字に対応するかを見ていく。 0から25はAからZに、26から51はaからzに、52から61は0から9に、62は「+」に、63は「/」に対応している。 したがって、 18は「S」に 6は「G」に 36は「k」に 33は「h」に それぞれ対応する。 結果として、「Hi!」はBase64エンコードされると「SGkh」という文字列になるわけだ。Base64のデコードはこの逆のプロセスを辿ることで行われるため、エンコードされたデータは常に正確に元の状態に戻る。

データのバイト数が3の倍数でない場合、例えば1バイトや2バイトのデータしか残っていない時、Base64はパディングとして「=」記号を追加する。これは、Base64の出力が常に4文字の倍数になるようにするためだ。例えば、1バイトのデータなら最後に「==」が、2バイトのデータなら最後に「=」が追加される。この「=」の数を見ることで、元のデータが何バイトだったかを推測することもできる。パディングは、デコードする側が正しいバイト数を復元するために重要な役割を果たす。

Base64エンコードは、データをテキスト形式で表現するため、元のデータよりもサイズが大きくなるというデメリットがある。具体的には、3バイトのデータが4文字(4バイト相当)になるため、元のデータサイズの約4/3倍、つまり約33%大きくなる。例えば、30KBの画像ファイルは約40KBに、3MBのPDFファイルは約4MBになる計算だ。メールに添付する場合、MIMEというメールの形式がBase64データを最大76文字の行に分割するため、さらにわずかにサイズが増加することもある。これが、20MBの添付ファイルがメールサービスの25MB制限を超える原因になることもある。

Base64は様々な場面で利用されている。身近な例としては、メールの添付ファイルが挙げられる。メールシステムはテキストを前提としているため、画像やPDFなどのバイナリファイルはBase64でエンコードされてメール本文中に埋め込まれて送信される。また、「データURI」として、小さな画像をHTMLやCSSのコードの中に直接埋め込む際にも使われる。これにより、外部ファイルを読み込む手間が省け、ウェブページの読み込みが速くなる場合がある。JSON形式のAPIでは、JSON自体にバイナリデータを直接扱う型がないため、画像ファイルなどをBase64文字列に変換して送信するのが一般的だ。さらに、HTTPベーシック認証では、「ユーザー名:パスワード」の組み合わせがBase64でエンコードされてHTTPヘッダーで送られたり、JSON Web Token(JWT)の各部分もBase64urlという形式でエンコードされている。

Base64には、URLやファイル名で特殊な意味を持つ「+」と「/」の文字を「-」(ハイフン)と「_」(アンダースコア)に置き換えた「Base64url」という派生形も存在する。これは、URLで安全に利用できるようにするためのもので、パディングの「=」も省略されることが多い。Base64urlでエンコードされた文字列を通常のBase64デコーダでデコードしようとしてエラーになる場合、これらの文字を元に戻し、必要に応じて「=」を追加することで解決できることがある。

Base64は便利だが、注意すべき重要な点がある。それは、Base64が「暗号化」ではないということだ。Base64は、データを安全な文字だけで表現するための「エンコーディング」であり、誰もが簡単に元のデータに戻すことができる。パスワードやAPIキーなどの機密情報をBase64でエンコードしても、それは誰でも読めるプレーンテキストと何ら変わりない。そのため、もし情報を秘密にしたいのであれば、Base64を使うだけでなく、別途SSL/TLS通信(HTTPS)や専用の暗号化技術を組み合わせて利用する必要がある。例えば、HTTPベーシック認証がHTTPS環境でのみ安全とされているのは、Base64自体にはデータを秘密にする機能がないためだ。

プログラミングの世界でもBase64はよく使われる。LinuxやmacOSのターミナルではbase64コマンドを使ってエンコード・デコードできる。JavaScriptではbtoa()でエンコード、atob()でデコードができるが、これらは1バイトで表現できる文字(主に英数字)にしか対応しておらず、日本語などの多バイト文字を含む文字列にはTextEncoderを使ってUTF-8バイト列に変換してから使う必要がある。Pythonではbase64モジュールがあり、バイト列を直接扱ってエンコード・デコードが可能で、Base64url形式に対応した関数も用意されている。

Base64デコードがうまくいかない場合、いくつかの原因が考えられる。一つは、先述のBase64url形式である可能性だ。「-」や「_」が含まれていないか確認し、必要なら「+」や「/」に変換する必要がある。また、パディングの「=」が不足していて文字列の長さが4の倍数になっていない場合もエラーになる。データURIのように「data:image/png;base64,」のような余計なプレフィックスが付いている場合は、その部分を取り除く必要がある。メールからコピーした際に意図せず混入した改行やスペースも問題になることがある。最も一般的なエラーの一つは、文字セットの不一致だ。例えば、UTF-8でエンコードされたテキストを、デコーダーが別の文字セット(例えばISO-8859-1)だと誤解してデコードすると、文字化けが発生する。「café」という文字列が「café」となるようなケースだ。最後に、デコード結果がテキストではなく、実は画像ファイルやPDFファイルなどのバイナリデータである場合もある。この場合は、デコードした内容をテキストとして読もうとせずに、正しい拡張子(.pngや.pdfなど)でファイルとして保存し、適切なアプリケーションで開く必要がある。Base64は、データの種類を問わず、テキストベースのシステムでデータを運ぶための強力なツールだが、その仕組みと特性を理解することが、システムエンジニアとして適切に扱うための第一歩となる。

関連コンテンツ

関連IT用語