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标签里只输出一次目标字符串。

posted @ 2016-12-30 14:33  大渡横流  阅读(225)  评论(0)    收藏  举报