ホームページ  >  記事  >  バックエンド開発  >  PHP で暗号化擬似乱数ジェネレーターを使用する方法

PHP で暗号化擬似乱数ジェネレーターを使用する方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-05-27 17:46:211877ブラウズ

この記事では、PHP で暗号化された擬似乱数ジェネレーターを使用する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHP で暗号化擬似乱数ジェネレーターを使用する方法

今日は、PHP の暗号化擬似乱数ジェネレーター (CSPRNG 拡張機能) を紹介します。乱数の生成は実際には非常に単純で、 rand() 関数または mt_rand() 関数を使用するだけですが、今日説明するのは、より複雑なアルゴリズムを使用する乱数生成器のセットです。 rand() は推奨されなくなりました。mt_rand() はより高速に生成され、現在では主流の関数です。暗号化された擬似乱数生成関数は暗号的に安全ですが、mt_rand() よりもわずかに遅くなります。オペレーティング システムのいくつかの機能に依存する必要がありますが、これについては後で説明します。

この暗号化拡張機能は PHP7 に統合されており、特別なインストールは必要ありませんが、PHP7 より前のバージョンの場合は、拡張機能を個別にインストールする必要があります。テスト時に以下で説明する関数が見つからない場合は、現在の PHP バージョンを確認してください。

擬似ランダム文字生成

var_dump(bin2hex(random_bytes(5)));
// string(10) "f28dc2bdd5"
var_dump(random_bytes(5));
// string(5) "�"��"

random_bytes() 各呼び出しでは、異なる内容のバイナリ文字列が生成され、パラメータはバイナリのバイト長です。直接取得したバイナリ データは形式が文字化けしているため、通常は bin2hex() を使用してバイナリを理解できる 16 進形式の文字列に変換する必要があります。ただし、変換後の 16 進数の文字長は、設定した文字長の 2 倍になります。この関数の関数は、安全なユーザー パスワード ソルト、キー キーワード、または初期化ベクトルを生成できます。

random_bytes() 各呼び出しは、異なる内容の文字列を生成します。パラメータは文字長のランダムな文字です。ここでは 5 を渡し、10 文字を返します。このパラメータは次の数であることがわかります。実際に返されるのはバイト数であり、1 文字が 2 バイトを占める戻り形式に対応します。あるいは、2 倍のパラメーターを返すことを覚えておくこともできます。この関数の役割としては、安全なユーザー パスワード ソルト、キー キーワード、または初期化ベクトルを生成できます。

擬似ランダム整数の生成

var_dump(random_int(100, 999));
var_dump(random_int(-1000, 0));
// int(900)
// int(-791)

整数の生成の場合はさらに簡単で、ランダムな整数の範囲であるrandom_int()関数に2つのパラメータを指定するだけです。実際、使い方は mt_rand() と同じです。

生成ソース

上記 2 つの暗号化擬似乱数関数の生成ソースは、次のようにオペレーティング システムによって異なります。

  • Windows システムの場合の場合は、CryptGenRandom() 関数が使用されます。 7.2.0 以降、Linux システムで CNG-API

  • を使用する場合、Linux getrandom(2) システム コール

  • が使用されます。 /dev/urandom を使用します

  • それ以外の場合は例外がスローされます

例外状況

これら 2 つ関数にも対応するものがあり、例えば上記で発生元が見つからなかった場合には例外がスローされますが、もちろんこれ以外にも例外が発生する要因はあります。

  • 適切なランダム性のソースが見つからない場合は、例外がスローされます。

  • 指定されたパラメータが無効な場合は、TypeError が発生します

  • 指定されたバイト長が無効な場合、エラーが発生します

概要

今日の内容は非常に簡単です。また、random_bytes() 関数を使用すると、自分でランダムにソルトを生成する関数を記述する必要はなくなります。パスワード ソルティングに関する記事と同様に、パスワードの「ソルティング」とは何ですか?ユーザーパスワードを安全に「ソルト」するにはどうすればよいでしょうか?ランダム文字生成関数(generateSalt)は基本的にこれで置き換えることができます。とても得した気がしませんか? 学びのスピードは決して止まりません。これからも一緒にもっと面白いコンテンツを探索していきましょう! !

テスト コード:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84%E5%8A%A0%E5%AF%86%E4%BC%AA%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8.php

推奨学習: php ビデオ チュートリアル

以上がPHP で暗号化擬似乱数ジェネレーターを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。