正如评论中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;
}
Run Code Online (Sandbox Code Playgroud)