我编写了一个应该生成伪随机字符串的代码。我试图通过收集用户鼠标移动的熵来提高随机性。
这是我的代码:
// 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。