Base64 を 2進数に変換する方法
- 入力 · Base64 に Base64 を貼り付けます。改行、スペース、
data:接頭辞、URLセーフの-と_、パディングの欠落はすべて受け付けます。 - デコードした各バイトが、出力 · 2進数 に 8 ビットで表示されます。
- 出力の下で 区切り文字 を選びます。スペース(デフォルト)、なし、
,、,、改行から選べます。 - 出力をコピー するか、ビット列を ダウンロード します。バイトを保存 は、代わりにデコードしたデータをファイルとして保存します。拡張子は内容から決まります。
2進数 → Base64 の切り替えか、2進数を Base64 に変換 で逆方向に変換できます。
Base64 の文字がビットになる仕組み
Base64 の各文字は 6 ビットを表します。値はアルファベット内での位置で、A = 0 から / = 63 までです。4 文字で 24 ビットになり、デコーダーはそれを 8 ビットのバイト 3 つにまとめ直します。SGkh で見てみましょう。
| 文字 | S | G | k | h |
|---|---|---|---|---|
| 値 | 18 | 6 | 36 | 33 |
| 6 ビット | 010010 | 000110 | 100100 | 100001 |
つなげると 010010000110100100100001 です。これをバイトに区切ると次のようになります。
| バイト | 01001000 | 01101001 | 00100001 |
|---|---|---|---|
| 10進数 | 72 | 105 | 33 |
| テキスト | H | i | ! |
つまり SGkh は Hi! で、2進数の出力は 01001000 01101001 00100001 となります。文字の境界とバイトの境界が揃うのは 24 ビットごとだけなので、Base64 の 1 文字が間違っていると、隣り合う 2 バイトが壊れることがあります。同じ処理をエンコーダー側から追った ステップごとの解説 もあります。
パディングと余ったビット
データが 3 バイトの倍数でない場合、最後のグループが短くなります。Hi は 16 ビットで、Base64 の 3 文字(18 ビット)が必要です。余分な 2 ビットはゼロになり、= でグループを 4 文字に揃えます。
| Base64 | 運ぶビット数 | 出力されるバイト |
|---|---|---|
SGkh | 24 | 01001000 01101001 00100001 |
SGk= | 18(うち 2 ビットは埋め草) | 01001000 01101001 |
SA== | 12(うち 4 ビットは埋め草) | 01001000 |
埋め草のビットが出力に現れることはありません。= が存在する理由は パディング のページで詳しく説明しています。
ビット表示が役立つ場面
- プロトコルやファイルヘッダーは、はい/いいえのフラグを 1 バイトに複数詰め込むことがよくあります。2進数なら、こうしたビットフィールドを 16進数の桁を頭の中で変換せずに直接読めます。
- 2 つの値を比べるなら、両方をデコードし、区切り文字 を改行にして 1 行ずつ比べれば、1 ビットだけの反転も簡単に見つかります。
- 学習やパズルでは、8 ビットのバイトと 6 ビットのグループを並べると、33% のサイズ増加がどこから来るのかがわかります。
数十バイトを超えるものなら、16進数のほうが読みやすいでしょう。Base64 を Hex に変換 なら、同じバイト列を 4 分の 1 の幅で表示できます。2進数の出力は 1 バイトあたり 8 文字に区切り文字が加わるので、100 万文字の Base64(75 万バイト)は約 675 万文字の 2進数になります。出力欄には先頭の 200 万文字を表示し、出力をコピー と ダウンロード では常に全体を取得できます。
コードで Base64 を 2進数に変換する
import base64
" ".join(f"{b:08b}" for b in base64.b64decode("SGkh"))
# '01001000 01101001 00100001'
Array.from(Buffer.from("SGkh", "base64"), b => b.toString(2).padStart(8, "0")).join(" ");
// '01001000 01101001 00100001'
代わりにデコードしたバイト列をバイナリファイルに書き出すには、Python なら open("out.bin", "wb").write(base64.b64decode(s))、Node なら fs.writeFileSync("out.bin", Buffer.from(s, "base64")) です。ファイルを扱う完全な例は Python と Node.js のページにあります。
よくある質問
Base64 を 2進数に変換するのは、Base64 をデコードするのと同じですか?
デコード処理は同じで、表示だけが違います。このページはバイト列を 0 と 1 で書き出します。「バイナリ」という言葉でよく意味されるファイルとしてのバイト列が欲しい場合は、Base64 をファイルに変換 か、ここにある バイトを保存 ボタンを使ってください。
Base64 は 1 文字 6 ビットなのに、なぜ 1 バイト 8 桁なのですか?
出力はバイト単位で、1 バイトは 8 ビットだからです。Base64 は同じビット列を 6 ビットずつに区切っているので、3 バイト(24 ビット)は必ず 4 文字に対応します。
スペースなしでビットを得るには?
区切り文字 を「なし」にしてください。SGk= なら 0100100001101001 という 1 つの文字列になります。
パディングのビットはどうなりますか?
捨てられます。SGk= の最後の文字は 6 ビットを運びますが、データに属するのは 4 ビットだけです。残りの 2 ビットは文字を埋めるためのゼロで、デコーダーはそれを捨てます。