Hexエンコーダー/デコーダー
16進数(hex)エンコーディングは16種類の記号(0-9とA-F)を使用してバイナリデータを表現します。各バイトは2つのhex文字になります。このツールはhex文字列をデコードして元のコンテンツを表示し、マジックバイトを使用してファイルタイプを識別し、バイナリ検査用のhexエディタスタイルのビューアーを提供します。
よくあるユースケース
- APIやログからのhexエンコードされたデータのデコード
- バイナリファイルヘッダーとマジックバイトの検査
- ネットワークパケットペイロードの分析
- 暗号化値(ハッシュ、鍵、IV)のデバッグ
- データベースやファイルからの生バイナリデータの表示
- デバッグツールからのhexダンプの変換
機能
- 複数形式のhex文字列をデコード(プレーン、スペース区切り、0xプレフィックス、コロン区切り、C配列)
- オフセット、hexバイト、ASCII表現を含むHexビューアー
- デコードされたコンテンツタイプの自動検出(JSON、XML、テキストなど)
- チェイン検出 — デコードされたコンテンツを自動検出し「Xとしてデコード」ボタンを表示
- マジックバイトを使用したバイナリデータのファイルタイプ識別
- 大きなファイル用の仮想スクロールと遅延チャンクローディング
- hexフォーマット間の変換(プレーン、スペース、0x、コロン、C配列)
- テキストを各種形式のhexにエンコード
例
ヒント
- Hexエンコーディングはデータサイズを2倍にします(各バイトが2文字になります)。
- 一般的なマジックバイト: PDFは25504446(%PDF)、ZIPは504B0304で始まります。
- 画像データ(PNG、JPEGなど)は自動検出され、画像アナライザーツールを使用します。
- 0xプレフィックスはほとんどのプログラミング言語で16進数を示します。
- MACアドレスとUUIDはコロンまたはハイフンの区切り文字を使用します。
- Hexは大文字小文字を区別しません: 0xFFは0xffと等しい。
解説 Hexエンコーダー/デコーダー
16進数(hex)エンコーディングは基数16表記を使用してバイナリデータを表現し、各バイトが0-9とA-Fのセットから正確に2文字にマッピングされます。このバイトからテキストへの直接的なマッピングにより、hexはデバッグ、暗号化、ネットワーク、低レベルプログラミングにおけるバイナリデータの標準表現となっています。
6ビットグループでバイト境界を曖昧にするBase64とは異なり、hexの各文字ペアは正確に1バイトにマッピングされるため、個々の値を読み取るのが容易です。メモリアドレス、レジスタ内容、ネットワークパケットダンプ、ファイルヘッダー、および暗号化値はすべて慣例的にhexで表示されます。
Hex文字列は多くのフォーマットで出現します。プレーンhex(48656c6c6f)はAPIでよく見られます。スペース区切りhex(48 65 6c 6c 6f)はパケットキャプチャに現れます。コロン区切りhex(48:65:6c:6c:6f)はMACアドレスや証明書のフィンガープリントに使用されます。0xプレフィックス(0x48、0x65)はC、JavaScript、Python、およびほとんどの言語での標準的なhexリテラルです。Cスタイル配列({0x48, 0x65})はソースコードにバイナリデータを埋め込みます。
ファイルタイプの識別はマジックバイト(ファイルの先頭にあるフォーマットを識別する特定のhexシーケンス)に依存します。PDFは25504446(%PDF)、PNGは89504E47、ZIPは504B0304、ELF実行ファイルは7F454C46で始まります。これらのシグネチャの認識は、ファイル処理コードのデバッグやバイナリデータの分析に不可欠です。
HexとBase64はどちらもバイナリデータをテキストとしてエンコードしますが、異なるトレードオフがあります。Hexは各バイトを2文字にマッピングし、データサイズを2倍にします(100%のオーバーヘッド)。Base64は3バイトごとに4文字にマッピングし、約33%のオーバーヘッドです。Base64は大きなデータに対してよりスペース効率が良く、テキストフォーマットにバイナリコンテンツを埋め込むのに適しています。Hexはバイトレベルの検査に対してより読みやすく、個々のバイト値が重要なデバッグ、暗号化値、プロトコル分析の標準となっています。
マジックバイト(ファイルシグネチャとも呼ばれます)はファイルの先頭にある特定のバイトシーケンスで、ファイル拡張子に関係なくフォーマットを識別します。PNGファイルは89 50 4E 47で始まり、JPEGはFF D8 FFで、ZIPは50 4B 03 04で始まります。Unixの「file」コマンドはファイルタイプの検出にマジックバイトに依存しており、このツールでもhexデータ内のバイナリコンテンツを識別するために同じ技術が使用されています。
Hexは大文字小文字を区別しません。なぜなら数字A-Fは大文字でも小文字でも値10-15を表すからです。0xFFと0xffはどちらも10進数の255を意味します。大文字小文字の選択は純粋に慣例です: 仕様やハッシュ出力では大文字が一般的で、CSSカラーやURLエンコーディングなどのWeb開発コンテキストでは小文字が一般的です。0xプレフィックスはC、C++、Java、JavaScript、Python、Go、Rustを含むほとんどのプログラミング言語で16進数リテラルを示します。プレフィックスなしでは「10」のような値は10進数と16進数の間で曖昧になります。0x10と書くことで明確に16進数(10進数で16)であることを示します。