Base64 を 16進数に変換する方法
- 入力 · Base64 に Base64 を貼り付けます。改行、スペース、
=パディングの欠落、URLセーフの文字はすべて受け付けます。 - 出力 · Hex(16進数) にバイト列が表示されます。バイト列が既知の形式と一致すれば、ステータス行の 推定形式 に判別したファイル形式が表示されます。
- 出力の下で 大文字/小文字、区切り文字、1 行あたりのバイト数 を選びます。
- 16進数を 出力をコピー するか ダウンロード します。バイトを保存 は、デコードしたバイト列そのものをファイルとして書き出します。
逆方向には、Hex(16進数) → Base64 の切り替えか、Hex を Base64 に変換 を使ってください。
出力オプション
Base64 の SGkh/w== には 4 バイトが入っています。それをどう書き出すかは 区切り文字 の設定で決まります。
| 区切り文字 | 出力 | 用途 |
|---|---|---|
| なし | 486921ff | sha256sum の出力との比較、データベース、URL |
| スペース | 48 69 21 ff | 1 バイトずつ読む、16進エディター |
: | 48:69:21:ff | 証明書や鍵のフィンガープリント |
0x | 0x48 0x69 0x21 0xff | C、C#、Java の定数 |
\x | \x48\x69\x21\xff | Python、C、シェルの文字列リテラル |
大文字/小文字 で 48 69 21 FF に切り替わります。1 行あたりのバイト数 を 16 にすると、1 行 16 バイトのおなじみのダンプ形式になり、オフセット 0x40 を探したり、ヘッダーの長さを数えたりしやすくなります。
先頭のバイトを読む
ほとんどのファイル形式は決まったシグネチャで始まり、16進数ならそのシグネチャを簡単に見分けられます。代表的な Base64 の接頭辞と、そのデコード結果です。
| Base64 の先頭 | 16進数 | 形式 |
|---|---|---|
iVBORw0KGgo | 89 50 4e 47 0d 0a 1a 0a | PNG |
/9j/ | ff d8 ff | JPEG |
JVBERi0 | 25 50 44 46 2d(%PDF-) | |
UEsDBA | 50 4b 03 04(PK) | ZIP、および DOCX、XLSX、JAR、APK |
H4sI | 1f 8b 08 | gzip |
先頭のバイトがどれにも一致しない場合でも、想定外の文字コードのテキストか、暗号化されたデータの可能性があります。暗号化データは 16進数で見ると一様にランダムに見えます。さらに多くの例は よく見る Base64 の接頭辞の一覧 にあります。データが開きたいファイルだと分かったら、Base64 をファイルに変換 でプレビューして保存できます。
ダイジェストとチェックサムの比較
チェックサムツールが出力するのは 16進数なので、ヘッダーや設定ファイルにある値を自分で計算した md5sum や sha256sum と比べるには、Base64 を 16進数に変換します。
| 見かける場所 | Base64 | 16進数 |
|---|---|---|
hello の Content-MD5 ヘッダー | XUFAKrxLKna5cZ2REBfFkg== | 5d41402abc4b2a76b9719d911017c592 |
hello の SHA-256 | LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ= | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
integrity="sha384-…" 属性、SHA256: 形式の SSH フィンガープリント(パディングなしの Base64)、JSON 内のバイナリの鍵も同様です。16進数で違えばバイト列が違います。一致していれば、Base64 での違いはパディングや URLセーフのアルファベットといった表記上のものにすぎません。
コードで Base64 を 16進数に変換する
import base64
base64.b64decode("SGkh/w==").hex() # '486921ff'
base64.b64decode("SGkh/w==").hex(" ") # '48 69 21 ff'
Buffer.from("SGkh/w==", "base64").toString("hex"); // '486921ff'
Python の b64decode は、validate=True を渡さない限りアルファベット外の文字を黙って捨てるので、URLセーフな文字列がエラーにならずに間違ったバイト列にデコードされることがあります。Node の "base64" デコーダーは両方のアルファベットを受け付けます。詳しくは Python と Node.js のページを参照してください。
よくある質問
Linux で Base64 を 16進数にデコードするには?
echo 'SGkh/w==' | base64 -d | xxd -p で 486921ff が表示されます。xxd -p は 30 バイトごとに改行します。1 行 32 バイトにするには -c 32 を付けてください。xxd がない場合は od -An -tx1 を使います。
16進数に ef bf bd が含まれるのはなぜですか?
この 3 バイトは置換文字 � の UTF-8 表現です。どこかのツールが Base64 をいったんテキストにデコードし、UTF-8 として不正なバイトをすべて置き換えてしまったのです。このページのように直接 16進数にデコードすれば、元のバイト列がそのまま得られます。
16進数は Base64 と比べてどのくらい長くなりますか?
約 1.5 倍です。Base64 の 4 文字は 3 バイトを表し、3 バイトは 16進数で 6 桁になります。44 文字の SHA-256 の値は 16進数で 64 桁になります。
Base64URL や data URI も受け付けますか?
はい。- と _ は + と / と同様に読み、パディングがなくても問題ありません。data:...;base64, 接頭辞は読み飛ばします。