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

【PHP8.x】Random\Randomizer::getBytes()メソッドの使い方

getBytesメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getBytesメソッドは、PHP 8で導入されたRandom\Randomizerクラスに属し、暗号学的に安全な乱数バイト列を生成するメソッドです。このメソッドは、指定された長さの予測が困難で安全性の高いランダムなバイト列を返します。

Random\Randomizerクラスは、PHPにおいて暗号用途にも耐えうるセキュアな乱数を生成するための現代的な機能を提供します。getBytesメソッドはその主要な機能の一つであり、セキュリティトークンの生成、セッションIDの作成、パスワードソルト、またはその他予測不可能性が強く求められるデータ生成に非常に適しています。

このメソッドを使用する際は、引数として生成したいバイト数を整数値で指定します。例えば、16バイトの乱数を生成したい場合は、引数に16を渡します。メソッドの戻り値は、指定されたバイト数に対応するバイナリ文字列(バイト列)となります。

従来の乱数生成関数と比べて、Random\Randomizer::getBytesはオペレーティングシステムが提供する高品質な乱数源を利用するため、より高い信頼性とセキュリティを提供します。システムエンジニアとして、セキュリティを考慮した乱数生成の際には、このgetBytesメソッドの利用が推奨されます。

構文(syntax)

1<?php
2
3$randomizer = new Random\Randomizer();
4$length = 16;
5$bytes = $randomizer->getBytes($length);

引数(parameters)

int $length

  • int $length: 生成するランダムなバイト列の長さを指定する整数

戻り値(return)

string

指定されたバイト数(引数で指定)のランダムなバイト列を文字列として返します。

サンプルコード

PHP 8: Randomizer::getBytes でランダムバイト列を生成する

1<?php
2
3// このサンプルコードは、PHP 8.2 以降で利用可能な Random\Randomizer クラスを使用します。
4
5/**
6 * 指定された長さの暗号論的に安全なランダムなバイト列(文字列)を生成します。
7 *
8 * Random\Randomizer::getBytes メソッドは、指定された長さのバイト列を生成し、
9 * その結果をバイナリセーフな文字列として返します。
10 * このメソッドは、暗号論的に安全な乱数エンジンを使用しており、
11 * セッショントークンやセキュリティキーなどの生成に適しています。
12 *
13 * @param int $length 生成するバイト列の長さ。
14 * @return string 生成されたランダムなバイト列。
15 */
16function generateRandomBytes(int $length): string
17{
18    // Randomizer クラスのインスタンスを作成します。
19    // デフォルトで暗号論的に安全な乱数エンジンが使用されます。
20    $randomizer = new Random\Randomizer();
21
22    // getBytes メソッドを呼び出し、指定された長さのランダムなバイト列を生成します。
23    $randomBytes = $randomizer->getBytes($length);
24
25    return $randomBytes;
26}
27
28// --- サンプルコードの使用例 ---
29
30// 生成したいランダムなバイト列の長さを指定します。
31$desiredLength = 16; // 例: 16バイト(128ビット)のバイト列を生成
32
33echo "指定された長さ: " . $desiredLength . " バイト\n";
34
35// 関数を呼び出してランダムなバイト列を生成します。
36$generatedBytes = generateRandomBytes($desiredLength);
37
38// 生成されたバイト列はバイナリデータのため、そのまま表示すると読みにくい場合があります。
39// 16進数形式に変換して表示すると、内容を確認しやすくなります。
40echo "生成されたランダムなバイト列 (16進数): " . bin2hex($generatedBytes) . "\n";
41echo "生成されたバイト列の実際の長さ: " . strlen($generatedBytes) . " バイト\n";
42
43// このバイト列は、例えばセッショントークン、暗号化キーの一部、またはユニークIDなどに利用できます。

PHP 8.2以降で利用可能なRandom\RandomizerクラスのgetBytesメソッドは、指定された長さの暗号論的に安全なランダムなバイト列を生成します。このメソッドは、セッショントークンや暗号化キー、ユニークIDなど、セキュリティが求められる場面での高品質な乱数生成に役立ちます。

引数$lengthには、生成したいバイト列の長さを整数で指定します。戻り値は、生成されたランダムなバイト列を格納したstring型で、バイナリセーフな文字列として返されます。

サンプルコードでは、Random\Randomizerのインスタンスを作成し、getBytesメソッドでバイト列を取得しています。生成されるバイト列はバイナリデータのため、直接表示すると読みにくい場合があります。そこで、bin2hex関数を用いて16進数形式に変換し、視覚的に内容を確認できるようにしています。この機能は、システムのセキュリティ強化に不可欠です。

このサンプルコードはPHP 8.2以降でのみ動作しますので、ご利用のPHPバージョンをご確認ください。Random\Randomizer::getBytesメソッドは、暗号論的に安全な、指定された長さのランダムなバイト列を生成します。これはセッショントークンや暗号化キーなど、セキュリティが求められる用途に非常に適しています。生成される戻り値はバイナリデータを含む文字列型です。そのため、そのまま表示すると文字化けするなど読みにくい場合があり、内容を確認する際はbin2hex関数で16進数形式に変換すると良いでしょう。このバイト列は人間が直接読むためのものではなく、プログラム内で安全な値として利用されることを理解しておくことが重要です。

関連コンテンツ