ホームページ >バックエンド開発 >PHPチュートリアル >パスワード リセットなどのアプリケーション用に PHP で乱数を安全に生成するにはどうすればよいですか?
PHP での安全な乱数生成: 包括的な概要
暗号化では、多くの場合、予測不可能な乱数の生成が必要になります。 PHP では、「mt_rand」関数はこれらの要件を満たしていません。この記事では、PHP 自体で乱数を生成する安全な方法を詳しく掘り下げ、パスワード忘れの問題に対処します。
最初に提案された解決策には、次のようにシードを保存し、呼び出しごとにシードを更新することが含まれます。
result = seed seed = sha512(seed . mt_rand())
ただし、このアプローチには重大な欠点があります。 sha512 関数は魔法のようにエントロピーを強化するものではなく、「mt_rand」呼び出しは敵対者を阻止するには不十分です。代わりに、最新のオペレーティング システムによって提供されるエントロピー ソースを利用することをお勧めします。
安全な 128 ビットのランダムを生成する PHP コード スニペットは次のとおりです。 string:
$pr_bits = ''; if (file_exists("/dev/urandom")) { $fp = fopen('/dev/urandom','rb'); $pr_bits .= fread($fp, 16); fclose($fp); } elseif (class_exists('COM')) { try { $CAPI_Util = new COM('CAPICOM.Utilities.1'); $pr_bits .= $CAPI_Util->GetRandom(16, 0); if ($pr_bits) { $pr_bits = md5($pr_bits, TRUE); } } catch (Exception $ex) { // echo 'Exception: ' . $ex->getMessage(); } } if (strlen($pr_bits) < 16) { // Inform the administrator of the missing pseudorandom generator }
移植性を最大限に高めるために、コードに両方のエントロピー ソースの試行を必ず含めてください。この方法は確実ではないかもしれませんが、最初のシードベースのアプローチと比較してセキュリティが大幅に向上します。
以上がパスワード リセットなどのアプリケーション用に PHP で乱数を安全に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。