Base64エンコーディングとデコーディング:完全ガイド

Base64とは何か?

Base64は、バイナリデータをASCII文字列形式で表現するバイナリ・テキスト変換方式です。テキストデータを扱うように設計されたメディアを通じてバイナリデータを保存および転送する必要がある場合に、様々なコンピュータアプリケーションで広く使用されています。

なぜBase64を使用するのか?

Base64は以下のような理由で一般的に使用されます:

Base64の仕組み

Base64エンコーディングは、入力データの3バイトごとを4つのASCII文字に変換することで機能します。以下は、そのプロセスを簡略化して説明したものです:

  1. バイナリデータの3バイト(合計24ビット)を取得する
  2. これらの24ビットを4つの6ビットチャンクに分割する
  3. 各6ビットチャンクを対応するBase64文字に変換する

Base64アルファベットは64文字で構成されています:A-Z、a-z、0-9、+、/。=文字は、入力データの長さが3で割り切れない場合にパディングとして使用されます。

Base64エンコーディング表

値 エンコード  値 エンコード  値 エンコード  値 エンコード
 0 A           17 R           34 i           51 z
 1 B           18 S           35 j           52 0
 2 C           19 T           36 k           53 1
 3 D           20 U           37 l           54 2
 4 E           21 V           38 m           55 3
 5 F           22 W           39 n           56 4
 6 G           23 X           40 o           57 5
 7 H           24 Y           41 p           58 6
 8 I           25 Z           42 q           59 7
 9 J           26 a           43 r           60 8
10 K           27 b           44 s           61 9
11 L           28 c           45 t           62 +
12 M           29 d           46 u           63 /
13 N           30 e           47 v
14 O           31 f           48 w      (パディング) =
15 P           32 g           49 x
16 Q           33 h           50 y

プログラミング言語でのBase64

PythonでのBase64


import base64

# エンコーディング
text = "こんにちは、世界!"
encoded = base64.b64encode(text.encode('utf-8')).decode('utf-8')
print(f"エンコード: {encoded}")

# デコーディング
decoded = base64.b64decode(encoded).decode('utf-8')
print(f"デコード: {decoded}")
            

JavaScriptでのBase64


// エンコーディング
let text = "こんにちは、世界!";
let encoded = btoa(unescape(encodeURIComponent(text)));
console.log(`エンコード: ${encoded}`);

// デコーディング
let decoded = decodeURIComponent(escape(atob(encoded)));
console.log(`デコード: ${decoded}`);
            

PHPでのBase64


<?php
// エンコーディング
$text = "こんにちは、世界!";
$encoded = base64_encode($text);
echo "エンコード: " . $encoded . "\n";

// デコーディング
$decoded = base64_decode($encoded);
echo "デコード: " . $decoded . "\n";
?>
            

Base64の一般的な使用例

HTMLやCSSへの画像の埋め込み

Base64を使用して、小さな画像を直接HTMLやCSSに埋め込むことができ、HTTPリクエストを減らすことができます:


<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==" alt="Base64でエンコードされた画像">
            

JSONでのデータ送信

JSONにバイナリデータを含める必要がある場合、Base64エンコーディングがよく使用されます:


{
  "name": "example.png",
  "content": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg=="
}
            

URL安全Base64

URLで使用するために、Base64の変形版では+と/をそれぞれ-と_に置き換えています:


標準: a+b/c==
URL安全: a-b_c==
            

オンラインBase64ツール

以下は、Base64のエンコードとデコードに使用できる人気のオンラインツールです:

Base64とセキュリティ

警告: Base64はエンコーディング方式であり、暗号化方式ではありません。セキュリティやデータ保護は提供しません。適切な暗号化なしで、機密情報の保存や送信にBase64を使用しないでください。

Base64は人間には読みにくいデータを作成しますが、デコードは非常に簡単です。機密データには常に適切な暗号化方法を使用してください。

Base64の長所と短所

長所:

短所:

よくある質問

Base64は暗号化ですか?

いいえ、Base64は暗号化ではありません。バイナリデータをASCII文字列形式で表現するエンコーディング方式です。セキュリティは提供しません。

なぜBase64エンコーディングはファイルサイズを増加させるのですか?

Base64エンコーディングは3バイトのデータを4文字で表現するため、ファイルサイズが増加します。これにより、サイズが約33%増加します。

Base64エンコードされたデータは圧縮できますか?

はい、Base64エンコードされたデータは圧縮できますが、一般的にはデータをBase64エンコードする前に圧縮する方が効率的です。