擬似ランダム文字列を生成するコードを作成しました。ユーザーのマウスの動きからエントロピーを収集することで、ランダム性を改善しようとしました。
これが私のコードです:
// As described in the PHP documentation
function make_seed() {
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
function rand_string($entropy, $length, $chars) {
mt_srand($entropy . make_seed()); // Here is the important line
$return = '';
$charlen = strlen($chars);
for ($i=0;$i<$length;$i++) {
$rand = mt_rand(0, $charlen) - 1;
$return .= substr($chars, $rand, 1);
}
return $return;
}
$entropy = '18421828841384386426948169412548'; // Mouse movements, changes everytime
echo rand_string($entropy, 20, 'abcdefghijklmnopqrstuvwxz');
関数を数回実行しました。一部の値は非常に頻繁に表示されるため、これは非常に弱い機能です。理由がわかりません。mt_srand のパラメータに制限はありますか? 数字である必要がありますか?
編集: mt_srand() シードは INT でなければなりません。