Base64 to Hex

Base64と16進数の相互変換

Base64

Hex

ローカルで実行 · シークレットの貼り付けも安全
出力がここに表示されます…
Base64 → Hex

Base64からHexへの変換とは?

Base64からhexへの変換は、バイナリデータを表現する2つの一般的なテキスト符号化方式を相互変換する処理です。Base64は64種類のASCII文字(A〜Z、a〜z、0〜9、+、/)を使ってバイナリデータを表し、3バイトごとに4文字へエンコードします。16進数(hexadecimal)は0〜9とa〜fの16文字からなるアルファベットで、1バイトをちょうど2文字で表します。両形式の変換は2段階で行われます:Base64文字列を生のバイト列にデコードし、そのバイト列を目的の形式に再エンコードします。

16進数表記は、低レベルプログラミング・暗号化・ネットワークプロトコルにおけるバイナリデータの標準表現です。hexの各文字は4ビット(ニブル)に直接対応しており、個々のバイト値を直感的に読み取れます。例えばSHA-256ハッシュは、ほぼ常に64文字のhex文字列として表示されます。一方、Base64はコンパクトさを優先した設計で、同じハッシュをBase64で表すと44文字になります。Base64はメール添付ファイル(MIME)・データURI・API通信ペイロードの標準エンコーディングです。

いずれのエンコーディングもRFC 4648で定義されています。両者の変換はロスレスです:データが追加・削除されることはなく、テキスト表現が変わるだけです。そのため、暗号化ペイロードのデバッグ、証明書フィンガープリントの確認、あるいは異なる表示形式を使うシステム間でのハッシュ出力照合など、日常的な作業でBase64からhexへの変換が活用されます。

このBase64 → Hex変換ツールを使う理由

このツールはブラウザ上でBase64と16進数を直接変換します。データがマシン外に送信されることはなく、入力と同時にリアルタイムで変換が行われます。

即時変換
Base64またはhexを貼り付けると即座に結果が表示されます — サーバーへの通信は一切不要。双方向モードにより、ワンクリックで変換方向を切り替えられます。
🔒
プライバシー優先の処理
すべての変換処理はJavaScriptを使用してブラウザ内でローカルに実行されます。暗号化キー・ハッシュ・トークンがネットワークに送信されることはありません。
双方向モード
ボタン1つでBase64→hexとhex→Base64を切り替えられます。標準Base64とURLセーフBase64の両バリアントを自動検出して処理します。
📋
そのまま使えるクリーンな出力
出力は区切り文字やプレフィックスなしの小文字hexです — ほとんどのAPI・CLI・プログラミング言語が期待する形式。ワンクリックでコピーできます。

Base64 → Hex変換の活用シーン

フロントエンド開発者
バイナリプロトコルのデバッグ時、またはブラウザのDevToolsコンソールでWebSocketフレームやArrayBufferの内容を調べる際に、Base64エンコードされたAPIレスポンスをhexに変換します。
バックエンドエンジニア
JWTシグネチャやHMACレスポンスに含まれるBase64ハッシュダイジェストをhexに変換し、OpenSSLやデータベースに格納されたhex形式の値と比較します。
DevOps / SRE
PEMファイルのBase64公開鍵をhexフィンガープリント形式に変換して、ブラウザや監視ツールに表示されるTLS証明書フィンガープリントを検証します。
セキュリティアナリスト
APIトラフィック中にBase64で届く暗号化キーや初期化ベクトル(IV)をhexに変換し、WiresharkやCyberChefでバイトレベルの解析を行います。
データエンジニア
PostgreSQLのbytea型やMongoDB BinDataなどのデータベースに格納されたBase64エンコードのバイナリ列をhexに変換し、比較・ログ記録・マイグレーションスクリプトに活用します。
学習者 / 入門者
同じバイト列がBase64と16進数それぞれでどのように表現されるかを実際に確認することで、両形式の関係を理解しエンコーディングの基礎を習得できます。

Base64と16進数エンコーディングの比較

Base64と16進数はどちらもバイナリデータを印刷可能なテキストに変換しますが、コンパクトさと可読性の間で異なるトレードオフを持ちます。以下の表に主な違いをまとめます。

プロパティBase64Hexadecimal
使用文字A-Z a-z 0-9 + / =0-9 a-f
1文字あたりのビット数64
サイズオーバーヘッド元サイズより約33%大きい元サイズより100%大きい
可読性コンパクトだが不透明1バイトが2文字で明示される
主な用途メール・データURI・API暗号ハッシュ・MACアドレス・カラーコード
仕様RFC 4648IEEE 754, RFC 4648 sec 8

変換例

以下の表は同一のバイト列をBase64と16進数で表した例です。hex出力は常にバイト数のちょうど2倍の文字数になり、Base64の長さは ceil(バイト数 / 3) * 4 になることを確認できます。

入力(テキスト / バイト列)Base64Hex
HelloSGVsbG8=48656c6c6f
ABQUI=4142
0xFFMHhGRg==30784646
AAE=0001
key=vala2V5PXZhbA==6b65793d76616c
Þ­¾ï (bytes)3q2+7w==deadbeef

変換の仕組み

Base64から16進数への変換は2段階のプロセスです。まず、Base64文字列を生のバイト列にデコードします。各文字を6ビット値にマッピングし、ビットを連結して8ビットのバイトに分割します(パディングは破棄)。この手順はRFC 4648 Section 4で定義されたエンコードを逆に辿るものです。

次に、各バイトを2桁の16進数表現に変換します。0〜255のバイト値は00〜ffに対応します。例えば0x4F(10進数79)は '4' と 'f' の2文字になります。完成したhex文字列は、すべての2文字ペアを連結したものです。逆方向(hexからBase64)は手順を逆に適用します:hexのペアをバイトに変換してから、Base64エンコードします。

4ビット2進数hex桁
00000
00011
00102
00113
01004
01015
01106
01117
10008
10019
1010a
1011b
1100c
1101d
1110e
1111f

コード例

以下のコードスニペットは、JavaScript・Python・Go・コマンドラインでBase64とhexを相互変換する方法を示しています。各例で両方向の変換をカバーしています。

JavaScript (browser / Node.js)
// Base64 to Hex
function base64ToHex(b64) {
  const raw = atob(b64)
  return Array.from(raw, c =>
    c.charCodeAt(0).toString(16).padStart(2, '0')
  ).join('')
}
base64ToHex('SGVsbG8=') // → "48656c6c6f"

// Hex to Base64
function hexToBase64(hex) {
  const bytes = hex.match(/.{1,2}/g).map(b => parseInt(b, 16))
  return btoa(String.fromCharCode(...bytes))
}
hexToBase64('48656c6c6f') // → "SGVsbG8="

// Node.js Buffer shorthand
Buffer.from('SGVsbG8=', 'base64').toString('hex')   // → "48656c6c6f"
Buffer.from('48656c6c6f', 'hex').toString('base64')  // → "SGVsbG8="
Python
import base64, binascii

# Base64 to Hex
b64_str = 'SGVsbG8='
raw_bytes = base64.b64decode(b64_str)
hex_str = raw_bytes.hex()            # → '48656c6c6f'
# or: binascii.hexlify(raw_bytes).decode()

# Hex to Base64
hex_str = '48656c6c6f'
raw_bytes = bytes.fromhex(hex_str)
b64_str = base64.b64encode(raw_bytes).decode()  # → 'SGVsbG8='

# One-liner for quick conversion
base64.b64encode(bytes.fromhex('deadbeef')).decode()  # → '3q2+7w=='
Go
package main

import (
    "encoding/base64"
    "encoding/hex"
    "fmt"
)

func main() {
    // Base64 to Hex
    raw, _ := base64.StdEncoding.DecodeString("SGVsbG8=")
    hexStr := hex.EncodeToString(raw)
    fmt.Println(hexStr) // → "48656c6c6f"

    // Hex to Base64
    raw2, _ := hex.DecodeString("48656c6c6f")
    b64Str := base64.StdEncoding.EncodeToString(raw2)
    fmt.Println(b64Str) // → "SGVsbG8="
}
CLI (bash)
# Base64 to Hex (using base64 + xxd)
echo -n 'SGVsbG8=' | base64 -d | xxd -p
# → 48656c6c6f

# Hex to Base64
echo -n '48656c6c6f' | xxd -r -p | base64
# → SGVsbG8=

# OpenSSL alternative
echo -n 'SGVsbG8=' | openssl base64 -d | xxd -p
# → 48656c6c6f

よくある質問

Base64と16進数の違いは何ですか?
Base64は64文字を使い1文字あたり6ビットをエンコードするため、生のバイトと比べて約33%のサイズオーバーヘッドが発生します。16進数は16文字を使い1文字あたり4ビットをエンコードするため、100%のオーバーヘッド — 元のサイズのちょうど2倍になります。Base64の方がコンパクトで、hexの方が人間に読みやすく、1バイトが常に2文字で表されます。
Base64からhexへの変換はロスレスですか?
はい。Base64とhexはどちらも同じ元のバイト列を決定論的かつ可逆的にエンコードします。変換によってデータが変更・圧縮・暗号化されることはありません。変換前後で生のバイト列は同一で、変わるのはテキスト表現だけです。
hex出力がBase64入力より長いのはなぜですか?
hexは1バイトあたり常に2文字を生成しますが、Base64は1バイトあたり約1.33文字を生成します。20バイトの値はBase64では28文字、hexでは40文字になります。これはhexの本質的なトレードオフで、サイズは大きくなる代わりに各バイトの境界が一目でわかります。
Base64url(URLセーフBase64)をhexに変換できますか?
はい。Base64urlは + を - に、/ を _ に置き換え、パディングを省略します。このツールは変換前にBase64url入力を自動的に正規化します。コードで処理する場合は、- を + に、_ を / に置き換えてからパディングを補い、デコードすれば標準Base64と同じバイト列が得られます。
SHA-256ハッシュをBase64からhexに変換するにはどうすればいいですか?
このツールにBase64ハッシュを貼り付けると64文字のhex文字列が得られます。コードでの変換方法:Base64文字列をバイト列にデコードし(SHA-256の場合は32バイト)、そのバイト列をhexエンコードします。Pythonの場合は `base64.b64decode(b64_hash).hex()` でhex表現が得られます。逆変換には `bytes.fromhex` を使います。
Base64入力に空白や改行が含まれている場合はどうなりますか?
このツールを含むほとんどのBase64デコーダーは、デコード前に空白を除去します。PEMエンコードの証明書やMIMEエンコードのコンテンツは通常、1行あたり64〜76文字でBase64を折り返しています。改行はエンコードされたデータの一部ではなく、変換時に無視されます。
Base64よりhexを使うべき場合はいつですか?
バイトレベルの可読性が必要な場合にhexを使います — 暗号化出力の確認、バイナリプロトコルのデバッグ、カラーコードの指定(#ff5733)などです。コンパクトさが重要な場合はBase64を使います — JSONへのデータ埋め込み、メール送信(MIME)、データURIの構築などです。保存・転送においては、Base64はhexと比べて約33%のスペースを節約できます。