ホームページ >バックエンド開発 >PHPチュートリアル >PHPのランダムさ - 幸運だと感じますか?

PHPのランダムさ - 幸運だと感じますか?

Christopher Nolan
Christopher Nolanオリジナル
2025-02-16 11:34:09143ブラウズ

この記事では、暗号化で乱数生成を使用することの課題を検証し、PHP 5とPHP 7の違いを強調しています。PHP5には、暗号化的に安全な乱数を生成するための容易に利用可能なメカニズムがありません。この目的のために機能します。

random_bytes random_int

Randomness in PHP - Do You Feel Lucky? CSPRNGS 暗号化された擬似ランダム数ジェネレーター(CSPRNG)は、暗号化アプリケーション向けに設計されたPRNGです。 その重要な特性は、高品質のランダム性であり、重要なことです:

キージェネレーション

ランダムなパスワードの作成

    暗号化アルゴリズム
  • php 7 php 7は、(指定されたバイトの長さの文字列を返す)と
(特定の範囲内でランダム整数を返す)をcsprng機能に提供します。

例:

random_bytes例:random_int

これらの関数は、オペレーティングシステムに応じてさまざまなランダム性のソースを利用し、

(Windows)、random_bytes(BSD)、

(Linux)、そして最後に
<code class="language-php">$bytes = random_bytes(10);
var_dump(bin2hex($bytes));
// Possible output: string(20) "7dfab0af960d359388e6"</code>
などの安全なオプションにフォールバックとして優先順位を付けます。 適切なソースが見つからない場合、エラーがスローされます。

random_int

ランダム性のテスト
<code class="language-php">var_dump(random_int(1, 100));
// Possible output: 27</code>

CryptGenRandom乱数ジェネレーターの品質を評価するには、統計テストが含まれます。簡単な例は、サイコロのロールをシミュレートすることです。 3つのサイコロを1,000,000回ローリングするための結果の予想される分布は、arc4random_bufおよび標準getrandom(2)関数によって生成された実際の結果と比較できます。 /dev/urandomコードの例(簡潔にするために簡略化された)と比較グラフ(以下を参照)は、

が期待値に近い分布を示し、

random_intphp 5代替rand

php 5には組み込みのcsprngがありません。 回避策には、random_intrand、または

または

への直接アクセスが含まれます。 randomlibやlibsodiumなどのライブラリは、追加のソリューションを提供しています Randomness in PHP - Do You Feel Lucky?

ライブラリ

PHP 5の互換性の場合、Paragon Initiative Enterprises

ライブラリはopenssl_random_pseudo_bytes()およびmcrypt_create_iv()機能を提供します。 Composer(<code class="language-php">$bytes = random_bytes(10); var_dump(bin2hex($bytes)); // Possible output: string(20) "7dfab0af960d359388e6"</code>

このライブラリは、/dev/urandom

random_compatを使用した単純なパスワード生成例

<code class="language-php">var_dump(random_int(1, 100));
// Possible output: 27</code>

結論 CSPRNGを使用することは、安全なアプリケーションに不可欠です。

ライブラリは、PHP 5の後方互換性のあるソリューションを提供しますが、PHP 7開発者は

およびrandom_compatを直接利用する必要があります。 信頼できる乱数生成の優先順位付けにより、アプリケーションのセキュリティが大幅に向上します random_bytesさらに読み取りrandom_int

謝辞

Description Link
Die Hard Test https://www.php.cn/link/1852a2083dbe1c2ec33ab9366feb2862
Chi-square test with dice example https://www.php.cn/link/fb6a253729096c1e92e43c26a6fdadc3
Kolmogorov-Smirnov Test https://www.php.cn/link/030d13e49bb7d1add5ac5ea2e4a43231
Spectral Test https://www.php.cn/link/6bbd80b04535d39be5e02dbfd8730469
RaBiGeTe test suite https://www.php.cn/link/e626afbcdb83368b3491c0c473da19f1
Random Number Generation In PHP (2011) https://www.php.cn/link/f7ff233e4ed3e6b13c5d5c7a9201e4ec
Testing RNG part 1 and 2 https://www.php.cn/link/a1c71b134d46d7f7ff00f488874a8d43, https://www.php.cn/link/2e3517ba49c2a7c999b9c8381185ae4e
ピアレビュー支援をしてくれたScott Arciszewskiに感謝します

以上がPHPのランダムさ - 幸運だと感じますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。