Base64変換ツール

テキストを入力すればそのBase64が得られ、Base64を貼り付ければ中身が見られます。どちら向きかを指定する必要はありません。出てきたものが画像やファイルなら、その形で表示します。

変換の向き
またはこの枠にドロップしてください。最大10 MBです。
エンコード時の書き方

結果は入力と同時に表示されます。テキストもファイルもこのページの中で変換され、こちらには送信されません。Base64はバイト列を文字で書き表す方法で、暗号化ではありません。誰でもデコードできます。

テキスト用の通り道にバイトを通す

メールは英語のアルファベットだけを想定して設計されました。初期のウェブアドレスもそうで、今のJSONやXMLも同じです。写真、PDF、暗号鍵は任意のバイトでできていて、そうした通り道にとっては、その多くのバイトが特別な意味を持つか、何の意味も持ちません。そのまま流し込むと壊れて届きます。

Base64はその回避策です。どんなバイト列も、64個の無害な文字(A〜Z、a〜z、0〜9、+と/)で書き直します。メールの添付ファイルはすべてこの方法で運ばれます。スタイルシートに埋め込まれた画像や、ログイン状態を保つトークンも同じです。

3バイトが4文字になる

1バイトは8ビットで、64文字のうちの1文字は6ビットを表せます。そこでエンコーダーは一度に3バイト(24ビット)を取り、6ビットずつ4つに分けます。各グループがアルファベットから1文字を選びます。

text     M        a        n
bytes    01001101 01100001 01101110
6 bits   010011 010110 000101 101110
Base64   T      W      F      u

これには2つの副作用があります。出力は入力より3分の1、約33 %長くなり、改行を入れるとさらに少し増えます。そして入力が3で割り切れないときは、最後のグループを1つか2つの=記号で埋めます。これをパディングと呼びます。MaはTWE=に、MはTQ==になります。パディングはデータを含まないので、省略するシステムもあります。

標準、URLセーフ、MIME

種類63番目と64番目の文字パディング使われる場面
標準+ /ありデータURI、HTTP Basic認証、PEM形式の鍵
URLセーフ(Base64URL)- _通常なしJSON Web Token、リンク、ファイル名
MIME+ /ありメールの添付ファイル(76文字ごとに改行)

デコードのとき、このツールはこれらをまとめて受け付けます。どちらのアルファベットでも、パディングがあってもなくても、どこにスペースや改行があってもかまいません。そのうえで、どの種類だったかを表示します。アルファベット以外の文字は位置とともに一覧にして飛ばします。1文字余る長さは指摘します。1文字は6ビットしか持たず1バイトにならないので、どこかが切れているということです。

テキストはまずバイトである

Base64がエンコードするのは文字ではなくバイトなので、何をするにもまずテキストをバイトに変える必要があります。このツールは、ウェブのほぼすべてで使われているUTF-8を使います。UTF-8では、アクセントのないラテン文字は1バイト、éは2バイト、ほとんどの漢字やかなは3バイト、絵文字は4バイトです。そのためé1文字はw6k=になります。

よくあるバグは、この手順を飛ばすことです。JavaScriptでbtoa("é")はLatin-1のバイトである6Q==を返し、btoa("👍")はエラーを投げます。戻すときには、atob()がéのあった場所にéを返します。対策は、エンコード前にTextEncoder、デコード後にTextDecoderを使うことです。

デコードしたバイトが有効なUTF-8でないとき、このツールは文字化けをそのまま表示しません。ほとんどのファイル形式を識別できる先頭のバイトを調べ(PNG、JPEG、GIF、WebP、PDF、ZIP、gzipを認識します)、画像ならプレビューし、結果をファイルとして提供し、先頭部分を16進数で表示します。

何も隠さない

Base64には鍵も秘密もありません。デコードは同じレシピを逆から読むだけで、どのプログラミング言語にも標準で入っています。Base64で「保護」したパスワードは、手間が増えただけの平文のパスワードです。HTTPヘッダーAuthorization: Basic dXNlcjpwYXNzを例にとると、誰でもuser:passに戻せます。

data:image/png;base64,iVBORw0…のようなdata: URIは、ファイル全体をアドレスの中に入れます。小さなアイコンならリクエストが1回減ります。それより大きいものでは33 %余分にかかり、ファイルを別にキャッシュすることもできなくなります。

よくある質問

Base64は暗号化ですか?

いいえ。エンコーディングです。64個の表示可能な文字でバイトを書く、公開された元に戻せる方法です。鍵がないので、誰でもデコードできます。データを運ぶために使い、守るためには決して使わないでください。

Base64の末尾にイコールが1つか2つ付くのはなぜですか?

エンコーダーは3バイトずつのグループで処理します。最後のグループが1バイトか2バイトしかないとき、出力の長さが4の倍数になるよう==か=で埋めます。この記号はデータを含まず、URLセーフのBase64では省かれることがよくあります。

Base64とBase64URLの違いは何ですか?

2文字だけです。標準のBase64は+と/を使いますが、どちらもウェブアドレスの中では特別な意味を持ちます。Base64URLはこれを-と_に置き換え、たいてい=のパディングも省きます。中のデータは同じです。

デコード後にアクセント付き文字や絵文字が化けるのはなぜですか?

デコーダーが間違った文字エンコーディングでバイトを読んだからです。たいていはテキストがUTF-8なのにLatin-1で読んだ場合で、éがéと表示されます。バイトをUTF-8としてデコードすれば(JavaScriptならTextDecoderで)、テキストは元どおりに戻ります。

Base64にするとファイルはどれくらい大きくなりますか?

約33 %です。3バイトごとに4文字になるからです。300 KBの画像はおよそ400 KBのテキストになり、メール用に76文字で改行するとさらに約2.6 %増えます。

画像をデータURIにするには?

画像をツールにドロップしてください。Base64と、src属性やCSSのurl()に貼り付けられる完全なdata:image/…;base64,…アドレスが得られます。数キロバイトの小さな画像だけに使ってください。