調べて分かる道具箱

Base64 とURLエンコード

どちらの欄に入力しても同時に変換します。日本語と絵文字はそのまま扱えます。

変換の種類

どちらの欄に入力しても、もう一方が同時に変わります。 入力した内容はこの画面の中だけで処理し、どこにも送信しません。

よくある質問

Base64 は暗号ですか?

暗号ではありません。誰でも元に戻せる変換なので、秘密を守る用途には使えません。目的は、任意のデータを ASCII の文字だけで表すことです。パスワードを Base64 にしただけで安全になったと考えるのは危険です。

日本語を変換すると文字化けするのはなぜですか?

Base64 は文字ではなくバイト列を扱う仕組みなので、日本語をどの文字コードでバイトに直すかが決まっていないと結果が食い違います。この計算機は UTF-8 で符号化しています。ブラウザの標準機能をそのまま使った実装では、日本語を渡した時点で処理が止まるものもあります。

末尾の = は何ですか?

詰め物です。Base64 は3バイトを4文字に変換するため、元のバイト数が3の倍数でないときに桁が余ります。その余りを = で埋めて、長さを4の倍数に揃えています。1〜2個つくことがあり、意味のあるデータではありません。

Base64 にすると容量はどれくらい増えますか?

約1.33倍です。3バイトを4文字で表すためで、詰め物の分を含めるとわずかに増えます。画像を Base64 にして HTML に直接埋め込む手法では、この増加分と、別ファイルとして読み込む場合の通信の往復とを比べて判断します。

URLエンコードとの違いは何ですか?

目的が違います。URLエンコードは、URL の中で特別な意味を持つ文字(? & = / など)や日本語を、%E3%81%82 のような形に置き換えて誤解釈を防ぐものです。ASCII の英数字はそのまま残るため、元の文字が読める状態で残ります。Base64 はすべての文字を置き換えるので、元の内容は読めなくなります。

Base64 が生まれた理由

電子メールの仕組みは、もともと ASCII の文字だけを運ぶ前提で作られました。 途中の中継サーバーが8ビット目を落としたり、特定のバイトを制御信号として解釈したりするため、 画像などのデータをそのまま流すと壊れます。

そこで、任意のバイト列を英数字と +/= だけで表す方法が必要になりました。 6ビットを1文字に 割り当てると 2 の6乗で64通りになり、これが「64」の由来です。 3バイト(24ビット)を 4文字(6ビット×4)に変換すると、ちょうど割り切れます。

いまでは添付ファイルのほか、HTML に画像を直接埋め込む data URL、 アクセストークンの受け渡しなど、テキストしか通らない経路にデータを乗せる場面で広く使われています。

読めない入力を空にしない理由

Base64 として形は正しくても、元に戻したバイト列が UTF-8 の文字列にならないことがあります。 別の文字コードで作られた場合や、途中で切れている場合です。

こうしたとき、結果を空欄にしたり、文字化けした記号を出したりする実装があります。 どちらも「変換に失敗した」のか「元がそういう内容だった」のかが利用者に分かりません。 この計算機では、戻せないことを理由とともに表示します。