Base64 を 16進数に変換

Base64 を貼り付けると、同じバイト列を 16進数で表示します。ハッシュ値の比較、鍵や署名の確認、ツールごとに異なる形式で表示されるフィンガープリントの照合に便利です。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. Base64 文字列を入力欄に貼り付けます。「変換元」には Base64、「変換先」には「16進数」があらかじめ選択されています。
  2. 16進数の出力を確認します。1 バイトごとに 16進数 2 桁で表されます。
  3. Base58 や Base32 など別の形式が必要な場合は「変換先」のエンコード方式を変更します。16進数から Base64 に戻すには「入力と出力を入れ替え」ボタンを押します。
  4. 結果をコピーします。

同じバイト列の 2 通りの表し方

16進数と Base64 は、どちらもバイナリデータをテキストとして表す方法です。16進数は 1 バイトに 2 文字を使うため、個々のバイト値を読み取ったり比較したりしやすくなります。Base64 は 3 バイトを 4 文字にまとめるため、長さが約 3 分の 1 短くなります。両者の変換で変わるのは表記だけで、データそのものは変わりません。

値バイト数16進数の長さBase64 の長さ
MD5 ハッシュ163224
SHA-1 ハッシュ204028
SHA-256 ハッシュ、Ed25519 公開鍵326444
SHA-384 ハッシュ489664
SHA-512 ハッシュ、Ed25519 署名6412888

バイナリエディタ、パケットアナライザ、デバッガが表示するのも 16進数です。Base64 を 16進数に変換すれば、これらのツールの表示とデータを突き合わせられます。

Base64 を 16進数に変換する必要がある場面

  • ハッシュ値の比較。sha256sum などのツールは 16進数で出力しますが、サブリソース完全性(SRI)属性、コンテンツセキュリティポリシー(CSP)のハッシュ、Content-MD5 などのチェックサムヘッダーでは Base64 が使われます。比較するには、どちらか一方を変換します。
  • SSH フィンガープリント。ssh-keygen -l は SHA256: 形式のフィンガープリントをパディングなしの Base64 で表示しますが、SSHFP DNS レコードには同じ SHA-256 ダイジェストが 16進数で格納されます。SHA256: より後ろの部分を貼り付けると、16進数の形式が得られます。
  • 鍵、IV、署名。暗号処理のコードをデバッグするとき、バイト列を 16進数で見ると、長さの確認や値の比較、バイトの欠落や余分なバイトの発見が簡単になります。

入力できる形式

Base64 入力に含まれるスペースや改行は無視され、URL セーフ文字の - と _ も受け付けます。= によるパディングは省略可能なので、JSON、JWT、ターミナルの出力からコピーした値をそのまま貼り付けられます。変換はデコード後のバイト列に対して行われます。結果はデータそのものの 16進数であり、Base64 の文字自体の 16進数ではありません。テキストの文字コードを 16進数で確認したい場合は、代わりに Base16 を使用してください。

# シェル
printf '%s' "$B64" | base64 --decode | xxd -p

# Python
base64.b64decode(s).hex()

// Node.js
Buffer.from(s, 'base64').toString('hex')

よくある質問

Base64 の文字列そのものを変換するのですか、それとも表しているバイト列を変換するのですか?
バイト列です。まず Base64 をデコードし、得られた各バイトを 16進数 2 桁で書き出します。Base64 文字列自体の文字コードが必要な場合は、Base16 ツールでテキストとしてエンコードしてください。
16進数の出力が Base64 の入力より長くなるのはなぜですか?

16進数は 1 バイトあたり 2 文字が必要ですが、Base64 は約 1.33 文字で済みます。32 バイトの SHA-256 ダイジェストは、Base64 では 44 文字、16進数では 64 文字になります。

大文字の 16進数やコロン区切りにするにはどうすればよいですか?
16進数の数字は大文字と小文字を区別しないため、どちらで書いても同じ値です。特定の書式にしたい場合は、Base16 エンコーダーで「入力形式」を「16進数」にして貼り付け、「大文字」を選ぶか、「区切り文字」で「スペース」または「コロン」を選ぶか、「プレフィックス」で 0x を選択してください。
JWT や JSON Web Key の Base64URL 値も変換できますか?

はい。URL セーフ文字やパディングの欠落は自動的に処理されるため、鍵のパラメーターや署名をそのまま貼り付けられます。