我想获取centos中/dev/urandom的随机数,但是发现是0 bytes.
$fp = @fopen('/dev/urandom','rb'); $result = ''; if ($fp !== FALSE) { $result .= @fread($fp, $len); @fclose($fp); }
$result为null,为什么?
学习是最好的投资!
/dev/urandom(近亲是/dev/random)是linux内核中产生随机数的外部文件接口。read该文件,就可以得到一串数字,宣称是随机数
你的第一个问题是:该设备文件,文件长度为0,是不是有问题?(我在linux console上, ls -l 该设备文件真没有看到所谓长度为0)这个不是问题,该文件正确的使用方法就是打开该文件,读取一段自定义长度的数据就可以了。
你的第二个问题是:为什么$result为null?那是因为要指定一个$len, 比如$len = 4 (读取4个字节的数据); 然后print的时候(你可能要通过print来看该变量result是否有拿到正确的值), 用这个: print(bin2hex($result));原因是数据是二进制的,你直接print可能会有问题。
另外, /dev/random跟/dev/urandom有使用上的差别,自己记得看一下。
这个虚拟设备你尽管读,读了多少算多少。
/dev/urandom(近亲是/dev/random)是linux内核中产生随机数的外部文件接口。
read该文件,就可以得到一串数字,宣称是随机数
你的第一个问题是:该设备文件,文件长度为0,是不是有问题?
(我在linux console上, ls -l 该设备文件真没有看到所谓长度为0)
这个不是问题,该文件正确的使用方法就是打开该文件,读取一段自定义长度的数据就可以了。
你的第二个问题是:为什么$result为null?
那是因为要指定一个$len, 比如$len = 4 (读取4个字节的数据); 然后print的时候(你可能要通过print来看该变量result是否有拿到正确的值), 用这个: print(bin2hex($result));
原因是数据是二进制的,你直接print可能会有问题。
另外, /dev/random跟/dev/urandom有使用上的差别,自己记得看一下。
这个虚拟设备你尽管读,读了多少算多少。