linux环境下用php读取urandom获得随机数
linux系统有两个随机数算法,一个是random,一个是urandom。
random的随机质量很高,但据说多次读取后会很慢;
urandom效率更高,随机数的质量也比较可靠。
那么,如何获取随机数呢?
linux下用shell命令:
head -n1 /dev/urandom|md5sum|head -c16
即可获得16位的随机数,其中-c16为指定字符长度参数。
在php中的方法:
1、用fopen打开文件,再读取文件。
1 $pr_bits = ''; 2 $fp = @fopen('/dev/urandom','rb'); 3 if ($fp !== FALSE) { 4 $pr_bits .= @fread($fp, 16); 5 @fclose($fp); 6 echo $pr_bits; //$pr_bits;即16位随机数
但是,以上方法获取的随机数的编码不是utf-8,不便使用,应该将其转码为uft-8,具体待补充。
另外,fopen()可以用file_get_contents()代替,后者效率更高。
2、用system()方法直接运行shell命令:
$fc = system('head -n1 /dev/urandom|md5sum|head -c16'); echo $fc;
该方法不存在编码问题。
注意!在页面上用echo测试输出时,会看到两次输出,其实是正常的。比如这样测试:
$fc = system('head -n1 /dev/urandom|md5sum|head -c16'); echo "<h1>".$fc."</h1>";
可以看到h1标签里只输出一次目标字符串。

浙公网安备 33010602011771号