B64

Base64変換

文字列とBase64を相互に変換します。日本語などのUTF-8文字と、JWTなどで使うURLセーフ形式に対応。

+ と / を使い、末尾を = で埋める。メールやデータURLで使う一般的な形式

・

ボタンを押すと、ここに結果が出ます

入力
0行 / 0文字
結果
0行 / 0文字

使い方とメモ

  • 日本語や絵文字は UTF-8 のバイト列にしてから Base64 にします。他のツールや言語で UTF-8 として扱った結果と一致します。
  • デコードは 形式 の選択にかかわらず、標準と URLセーフのどちらを貼っても戻せます。改行や空白が混ざっていても無視します。
  • デコード結果が文字として読めないときは、画像やファイルを Base64 にしたものの可能性があります。その場合はバイト数だけお知らせします。
  • 変換はブラウザの中だけで動きます。トークンや認証情報を貼っても、どこにも送信されません。
B64

Base64 のしくみ

Base64 は、どんなバイト列も英数字と記号 64 種類だけで書き表すための変換です。メールの本文や URL、JSON のように「決まった文字しか通せない場所」に、画像やバイナリを載せるために使われます。

元のデータを 3 バイト(24 ビット)ずつ区切り、6 ビットずつ 4 文字に置き換えます。そのため、変換後の長さは元のおよそ 4/3(約 33% 増し)になります。最後が 3 バイトに満たないときは、足りない分を = で埋めて 4 文字にそろえます。

a     → YQ==       (1 バイト)
ab    → YWI=       (2 バイト)
abc   → YWJj       (3 バイト)
abcd  → YWJjZA==   (4 バイト)

標準と URL セーフの違い

標準の Base64 は + と / を使います。どちらも URL の中では特別な意味を持つため、URL やファイル名に入れる用途では、+ を - に、/ を _ に置き換えた「URL セーフ」形式(base64url)を使います。末尾の = も省くのが一般的です。

標準       Pz8+Pg==
URLセーフ  Pz8-Pg

JWT(JSON Web Token)は、ピリオドで区切られた 3 つの部分がそれぞれ URL セーフ形式です。真ん中の部分をこのツールでデコードすると、中身の JSON(ユーザー ID や有効期限)を読めます。ただし、署名が正しいかどうかまでは確かめられません。

日本語が文字化けする理由

Base64 が扱うのは文字ではなくバイト列です。同じ「あ」でも、どの文字コードでバイト列にしたかによって結果が変わります。

あ(UTF-8)      → 44GC
あ(Shift_JIS)  → gqA=

別のツールでデコードした結果が文字化けするときは、元のデータが UTF-8 以外(古いシステムの Shift_JIS など)で作られている可能性があります。このツールは UTF-8 として読むので、上の gqA= をデコードすると「UTF-8 の文字列として読めません」と表示されます。

JavaScript の btoa() に日本語をそのまま渡すと InvalidCharacterError になるのも同じ理由です。btoa() は 1 文字を 1 バイトとして扱うので、先に TextEncoder で UTF-8 のバイト列にしてから変換する必要があります。

よく見かける場所

  • Basic 認証: Authorization: Basic dXNlcjpwYXNz の後半は user:pass を Base64 にしたものです。デコードすればそのまま読めます。
  • data URI: data:image/png;base64,iVBORw0… のように、画像を HTML や CSS に直接埋め込む書き方です。
  • メールの添付ファイル: 添付ファイルは Base64 にして本文に入れて送られます。その際、76 文字ごとに改行が入ります。
  • 証明書や鍵(PEM 形式): -----BEGIN CERTIFICATE----- で囲まれた部分は、64 文字ごとに改行された Base64 です。

Base64 は暗号化ではない

Base64 は誰でも元に戻せる「書き方の変換」で、中身を隠す働きはありません。Basic 認証のパスワードや JWT の中身が読めてしまうのはそのためです。秘密にしたい情報は、Base64 にするだけでなく HTTPS で送る、暗号化するなど、別の手段で守ってください。