この暗号化拡張機能は 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 ビデオ チュートリアル