Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】sodium_bin2hex()関数の使い方

sodium_bin2hex関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

sodium_bin2hex関数は、コンピュータが内部で処理するバイナリデータを、人間が読みやすい16進数形式の文字列に変換する関数です。バイナリデータは0と1の並びで構成され、そのままでは内容を理解したり、テキストベースのシステムで扱ったりすることが困難です。この関数を利用することで、例えば、ファイルに保存したり、データベースに格納したり、ネットワークを通じて送信したりする際に、安全かつ確実にデータを表現できるようになります。

特に、PHPのsodium拡張機能は高度な暗号化機能を提供しており、暗号化されたデータやハッシュ値、秘密鍵などは通常バイナリ形式で生成されます。これらの機密性の高いバイナリデータを、誤って破損させたり、不適切な形式で扱ったりすることなく、安全にログに記録したり、設定ファイルに保存したり、ウェブアプリケーション間でやり取りしたりする場合にsodium_bin2hex関数が役立ちます。

この関数は、変換したいバイナリデータを文字列として引数に一つ受け取り、対応する16進数表現の文字列を戻り値として返します。例えば、1バイトのバイナリデータは、2文字の16進数(例: 0fa3など)に変換されるため、変換後の文字列の長さは元のバイナリデータの約2倍になります。この機能により、データの可読性を高めつつ、様々な環境でバイナリデータを安全かつ確実に扱うことが可能になります。利用するには、PHP環境にsodium拡張がインストールされ、有効になっている必要があります。

構文(syntax)

1<?php
2
3$binaryData = random_bytes(16); // 例: 16バイトのバイナリデータ
4$hexString = sodium_bin2hex($binaryData); // バイナリデータを16進数文字列に変換
5
6?>

引数(parameters)

string $string

  • string $string: 16進数文字列に変換したいバイナリデータ(文字列)を指定します

戻り値(return)

string

バイナリデータを16進数文字列に変換した結果を返します。

サンプルコード

sodium_bin2hexとsodium_hex2binでバイナリ変換する

1<?php
2
3// libsodium拡張が利用可能であることを前提とします。
4// バイナリデータを16進数文字列に変換し、その後元に戻す例
5
6// 1. 元になるバイナリデータを生成します。
7// random_bytes()は暗号学的に安全なランダムバイト列を生成します。
8$originalBinaryData = random_bytes(32); // 32バイトのランダムなデータ
9
10echo "元のバイナリデータ (Hex表示): " . bin2hex($originalBinaryData) . "\n\n";
11
12// 2. sodium_bin2hex() を使用して、バイナリデータを16進数文字列に変換します。
13// この関数は、バイナリデータ(例: ハッシュ値、キー)を人間が読みやすい16進数形式に変換するのに便利です。
14$hexEncodedString = sodium_bin2hex($originalBinaryData);
15
16echo "16進数に変換された文字列: " . $hexEncodedString . "\n\n";
17
18// 3. キーワードである sodium_hex2bin() を使用して、16進数文字列を元のバイナリデータに戻します。
19// これは sodium_bin2hex() の逆の操作です。
20$decodedBinaryData = sodium_hex2bin($hexEncodedString);
21
22echo "16進数文字列からデコードされたバイナリデータ (Hex表示): " . bin2hex($decodedBinaryData) . "\n\n";
23
24// 4. 元のバイナリデータとデコードされたバイナリデータが一致するかを検証します。
25if ($originalBinaryData === $decodedBinaryData) {
26    echo "検証結果: 元のバイナリデータとデコードされたバイナリデータは一致します。\n";
27    echo "sodium_bin2hex() と sodium_hex2bin() は正しく動作しました。\n";
28} else {
29    echo "検証結果: エラー - 元のバイナリデータとデコードされたバイナリデータは一致しません。\n";
30}

PHPのsodium_bin2hex関数は、バイナリデータを16進数文字列に変換するための関数です。これは、ハッシュ値や暗号化キーといったバイナリデータを、人間が読みやすい形式で表示したり、テキストとして扱いやすい形にする際に便利に利用されます。

サンプルコードでは、まずrandom_bytes関数を用いて32バイトのランダムなバイナリデータを用意しています。次に、このバイナリデータをsodium_bin2hex関数の引数として渡すと、戻り値としてそのデータに対応する16進数形式の文字列が得られます。

また、キーワードとして示されているsodium_hex2bin関数は、sodium_bin2hexの逆の操作を行います。sodium_hex2binに16進数文字列を引数として渡せば、元のバイナリデータへと正確にデコード(復元)することが可能です。

コードの最後では、元のバイナリデータとデコードされたバイナリデータが完全に一致することを検証しています。これにより、sodium_bin2hexsodium_hex2binの組み合わせが、バイナリデータと16進数文字列の間で安全かつ可逆的な変換を正確に実行できることが確認できます。これらの関数は、特にセキュリティ関連のデータを扱う際に重宝されます。

このサンプルコードを利用するには、PHPにlibsodium拡張がインストールされ、有効になっていることが必須です。有効でない場合、sodium_bin2hex関数やsodium_hex2bin関数は利用できず、エラーが発生します。sodium_bin2hexはバイナリデータを16進数文字列に変換する関数で、ハッシュ値や暗号キーなどのバイナリ情報を人間が読みやすい形式で表示する際に便利です。キーワードにあるsodium_hex2binは、その逆の操作で16進数文字列を元のバイナリデータに戻します。これらの関数はセキュリティ関連データの取り扱いにおいて、正しいバイナリデータを扱うための重要なツールとなります。

PHP sodium_bin2hex でバイナリを16進数に変換する

1<?php
2
3/**
4 * Demonstrates the use of the sodium_bin2hex function.
5 * This function converts a binary string into its hexadecimal representation.
6 * It's useful for displaying or storing binary data (like cryptographic keys or nonces)
7 * in a human-readable, text-friendly format.
8 */
9function demonstrateSodiumBin2hex(): void
10{
11    // 1. Generate some random binary data.
12    // In a real-world scenario, this could be a cryptographic key, a nonce,
13    // or any raw binary output from a cryptographic operation.
14    // Here, we generate 16 random bytes (128 bits).
15    $binaryData = random_bytes(16);
16
17    echo "Original binary data (raw bytes): \n";
18    echo "  Length: " . strlen($binaryData) . " bytes\n";
19    // For display purposes, we can show its raw hex representation using bin2hex
20    // just to make the 'original' visible, though it's still binary.
21    echo "  (Displaying as hex for visibility): " . bin2hex($binaryData) . "\n\n";
22
23    // 2. Convert the binary data to a hexadecimal string using sodium_bin2hex.
24    // Each byte in the binary data will be represented by two hexadecimal characters.
25    $hexadecimalString = sodium_bin2hex($binaryData);
26
27    echo "Converted hexadecimal string using sodium_bin2hex(): \n";
28    echo "  Value: " . $hexadecimalString . "\n";
29    echo "  Length: " . strlen($hexadecimalString) . " characters\n\n";
30
31    // 3. Verification (optional, but good for understanding):
32    // We can convert the hexadecimal string back to binary using sodium_hex2bin
33    // to confirm that the conversion is reversible and lossless.
34    $reconvertedBinaryData = sodium_hex2bin($hexadecimalString);
35
36    echo "Verification by converting back to binary using sodium_hex2bin(): \n";
37    echo "  Length of reconverted data: " . strlen($reconvertedBinaryData) . " bytes\n";
38    echo "  Does reconverted data match original? " . (string)($binaryData === $reconvertedBinaryData ? 'Yes' : 'No') . "\n";
39}
40
41// Execute the demonstration function.
42demonstrateSodiumBin2hex();
43
44?>

PHP 8で導入されたsodium_bin2hex関数は、バイナリ形式のデータを、テキストとして扱える16進数形式の文字列に変換します。

引数にはバイナリ文字列string $stringを指定します。これは暗号化キーやノンスのような生のバイナリデータです。この関数は、指定されたバイナリ文字列の各バイトを2桁の16進数文字に変換した文字列を返します。

サンプルコードでは、random_bytes(16)で生成したバイナリデータをsodium_bin2hexに渡し、a1b2c3d4e5f67890...のような16進数文字列に変換しています。これにより、表示や保存が難しいバイナリデータが、ログ出力やデータベース保存に適した形式になります。

さらに、sodium_bin2hexで変換された16進数文字列は、sodium_hex2bin関数を用いることで元のバイナリデータへ完全に復元可能です。これは情報損失なしに形式変換が行われることを保証し、システムエンジニアがセキュリティ関連のバイナリデータを安全に扱う上で非常に重要です。

sodium_bin2hex関数はバイナリデータを16進数文字列に変換します。利用にはPHPのsodium拡張が必須で、未有効化だとエラーになります。

暗号化で生成される鍵やナンスなどのバイナリデータを、ログやデータベース保存に適したテキスト形式にしたい場合に便利です。変換後の文字列の長さは、元のバイナリデータのちょうど2倍になります。

sodium_hex2bin関数と組み合わせることで、16進数とバイナリの相互変換が可能です。これにより、変換の検証や保存データの復元ができます。暗号関連データを扱うため、変換後の文字列も機密情報として、厳重なセキュリティ対策が必要です。

関連コンテンツ

関連プログラミング言語