我需要快速的方法在
PHP中生成随机字符串a-Z0-9.我一直在做一些思考和测试,这是我到目前为止所做的:
function randStr($length) { $result = null; $replace = array('/','+','='); while(!isset($result[$length-1])) { $result.= str_replace($replace,NULL,base64_encode(mcrypt_create_iv($length,MCRYPT_RAND))); } return substr($result,$length); }
与为每个char迭代并选择随机ASCII值的函数相比,函数似乎工作得很快,但我关注的是我的实现的“质量”.我对密码学知之甚少,所以我想问一下这种函数是否会产生“好的”随机值.
> mcrypt_create_iv似乎返回某种随机二进制值,实际上用于使用mcrypt库加密/解密数据.什么是base64_encode对这种二进制数据的影响,当我base64_encode时,我实际上是否减少了熵?
> mcrypt_create_iv的第二个参数如何影响我的结果? PHP.net手册指出MCRYPT_RAND是’系统随机数生成器’.它是特定于操作系统的,如果是,那么创建了多少好的值?