正如comments of mt_rand()
中提到的那样,安全性很弱,我们应该使用/ dev / urandom.我的问题是,从urandom我得到一个二进制字符串.
如何将此二进制字符串转换为0-9a-zA-Z?
看起来像base_convert()在这里不起作用.
解决方法:
仅供记录全功能:
function randomFromDev($len)
{
$fp = @fopen('/dev/urandom','rb');
$result = '';
if ($fp !== FALSE) {
$result .= @fread($fp, $len);
@fclose($fp);
}
else
{
trigger_error('Can not open /dev/urandom.');
}
// convert from binary to string
$result = base64_encode($result);
// remove none url chars
$result = strtr($result, '+/', '-_');
// Remove = from the end
$result = str_replace('=', ' ', $result);
return $result;
}