テキストを Base64 に変換する方法
- 入力 · テキスト に文字列を入力するか貼り付けます。スペースや改行も含め、入力したものがそのままエンコードされます。
- Base64 は 出力 · Base64 に表示されます。ボタンの下の 入力 の数値は、テキストが何バイトになったかを示します。
- 値をデコードする側のシステムが別の文字コードを想定していない限り、文字コード は UTF-8 のままにしてください。
- 文字列を URL やトークンに入れる場合は、URLセーフ(- _) と パディングなし(=) にチェックを入れます。
- 出力をコピー を押すか、ダウンロード で
base64.txtとして保存します。
元に戻すには Base64 をテキストに を使うか、入れ替え を押してこの場で結果をデコードしてください。
1 つの文字列から複数の Base64 が生まれる
Base64 がエンコードするのはバイト列で、文字列は文字コードを通して初めてバイト列になります。そのため、同じ 5 文字から 4 通りの答えが出ることがあります。
| 文字列 | 文字コード | バイト数 | Base64 |
|---|---|---|---|
Grüße | UTF-8 | 7 | R3LDvMOfZQ== |
Grüße | Windows-1252 または ISO-8859-1 | 5 | R3L832U= |
Grüße | UTF-16LE | 10 | RwByAPwA3wBlAA== |
Grüße | UTF-16BE | 10 | AEcAcgD8AN8AZQ== |
目に見えない文字も数に入ります。Hello は SGVsbG8=、末尾にスペースのある Hello は SGVsbG8g、Windows の改行が続く Hello は SGVsbG8NCg== です。複数行の値では改行が典型的な落とし穴になります。line1 と line2 を \n でつなぐと bGluZTEKbGluZTI=、\r\n でつなぐと bGluZTENCmxpbmUy になります。2 つのシステムで値が食い違う場合は、まずバイト数を比べてください。
Base64 文字列の長さ
入力の 3 バイトごとに 4 文字になり、最後に残った 1~2 バイトのグループは = で 4 文字に揃えられます。
| 入力のバイト数 | Base64 の文字数 | 例(x の繰り返し) |
|---|---|---|
| 1 | 4 | eA== |
| 2 | 4 | eHg= |
| 3 | 4 | eHh4 |
| 4 | 8 | eHh4eA== |
| 10 | 16 | eHh4eHh4eHh4eA== |
つまり文字列は約 3 分の 1 長くなり、UTF-8 で複数バイトを使う非 ASCII 文字が含まれればさらに長くなります。折り返した出力の正確な数値は Base64 のサイズオーバーヘッド のページにあります。
エンコードした文字列の行き先
文字列を Base64 に変換するのは、たいてい特殊文字を嫌う場所を通すためです。
- 環境変数と CI のシークレット。 引用符、
$、改行を含む値は壊れてしまいます。postgres://app:s3cret@db:5432/appはcG9zdGdyZXM6Ly9hcHA6czNjcmV0QGRiOjU0MzIvYXBwとなり、エスケープの要らない 1 行になります。 - Kubernetes の Secret。
data:の値は Base64 でなければなりません。Kubernetes Secret デコーダー で読み戻せます。 - HTTP ヘッダー。 たとえば
user:passwordをエンコードしたAuthorization: Basicです。Basic 認証ヘッダー生成ツール でヘッダー全体を作れます。 - JSON や XML のフィールド。 エスケープのルールに邪魔されずに任意のテキストを運ぶ必要がある場合です(JSON を Base64 に)。
どれも値を隠すものではありません。文字列を持っていれば誰でもデコードできるので、エンコードしたシークレットも平文のシークレットと同じように扱ってください。エンコードと暗号化の違い を参照してください。
コードで文字列を Base64 に
import base64
base64.b64encode("Grüße".encode("utf-8")).decode("ascii") # 'R3LDvMOfZQ=='
base64.b64encode("Grüße".encode("cp1252")).decode("ascii") # 'R3L832U='
// Node.js
Buffer.from("Grüße", "utf8").toString("base64"); // "R3LDvMOfZQ=="
Buffer.from("Grüße", "utf16le").toString("base64"); // "RwByAPwA3wBlAA=="
どちらの言語でも、文字列をバイト列にする手順を明示する必要があり、そこで文字コードを選びます。詳しくは Python と Node.js のページを参照してください。
よくある質問
文字列を Base64 に変換するには?
文字コード(ほぼどこでも UTF-8)で文字列をバイト列にし、そのバイト列を Base64 エンコードします。上のツールは両方を行います。Python なら base64.b64encode(s.encode("utf-8")).decode() です。
同じテキストなら必ず同じ Base64 になりますか?
バイト列が同じ場合に限ります。Grüße は UTF-8 では R3LDvMOfZQ== ですが、Windows-1252 では R3L832U= です。スペースや改行が 1 つ増えるだけでも結果は変わります。
Base64 文字列の長さはどれくらいになりますか?
入力が n バイトなら、改行を除いて 4 × ⌈n / 3⌉ 文字です。10 バイトの文字列なら 16 文字になります。任意の長さについては サイズ計算ツール で計算できます。
Base64 文字列を設定ファイルや環境変数に入れられますか?
はい、それが主な用途の一つです。改行や引用符を含むどんな値も、安全な文字だけの 1 行に変わります。1 行のまま保つには、折り返しを「なし」のままにしておいてください。