首页 > 编程语言 >php获取/dev/urandom随机数

php获取/dev/urandom随机数

时间:2022-11-24 18:07:57浏览次数:40  
标签:fp bytes dev result urandom diff php


1.有一种算是比较好的随机数算法,但是需要支持​​Mcrypt​​模块:

// equiv to rand, mt_rand
// returns int in *closed* interval [$min,$max]
function devurandom_rand($min = 0, $max = 0x7FFFFFFF) {
$diff = $max - $min;
if ($diff < 0 || $diff > 0x7FFFFFFF) {
throw new RuntimeException("Bad range");
}
$bytes = mcrypt_create_iv(4, MCRYPT_DEV_URANDOM);
if ($bytes === false || strlen($bytes) != 4) {
throw new RuntimeException("Unable to get 4 bytes");
}
$ary = unpack("Nint", $bytes);
$val = $ary['int'] & 0x7FFFFFFF; // 32-bit safe
$fp = (float) $val / 2147483647.0; // convert to [0,1]
return round($fp * $diff) + $min;
}

另外一种方法是真正读取​​/dev/urandom​​ 文件中的随机数:

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;
}


标签:fp,bytes,dev,result,urandom,diff,php
From: https://blog.51cto.com/u_15890522/5884408

相关文章

  • thinkPHP5.0开发微信小程序登录接口signature验证失败
    我用TP5开发微信小程序登录接口的时候,在校验签名signature那遇到了个坑,一直校验失败,找了很久才发现原因是:tp的input方法会自动转移html字符,比如’”’转成了​​&quote;​......
  • centos安装php模块之后还是提示not found解决方法
    我的centos服务器是7.3版本,我装了php5.6版本,然后再装memcached等扩展的时候,一直用不了,方法没找到。在网上找了很多资料,都说重启nginx服务器,然而行不通。。。。正确做法应该......
  • PHP htmlspecialchars()的用法
    htmlspecialchars()函数把一些预定义的字符转换为HTML实体。这个函数的效果其实在浏览器中打开页面是看不到的,要查看源代码才能看到。&(和号)成为&”(双引号)成为"’(......
  • php文件目录分隔符Windows与linux兼容的问题
    再这两个系统中,Windows的分隔符是“\”,linux是“/”,所以在文件目录匹配的时候可能会遇到系统不兼容出错,所以一般定义目录分隔符使用如下php常量:DIRECTORY_SEPARATOR......
  • php二维数组转一维数组的方法
    如下二维数组$arr=array(1){[0]=>array(1){["imgurl"]=>string(79)"/img/upload/microChatData/1/20161221/thumb/621fc7668474b47b43......
  • PHP配置连接SQL Server
    1.到https://www.microsoft.com/en-us/download/details.aspx?id=20098这个官网下载适合自己PHP版本MicrosoftDriversforPHPforSQLServer。2.下载完解压到PHP中ext文......
  • PHP轻量级验证器 Particle\Validator
    Particle\Validator是一个小巧优雅的实用的PHP验证类库,提供了一个非常简洁的API。它无需依赖其他组件,提供友好的文档,并且有利于扩展。composerrequireparticle/validat......
  • springboot的 application-dev.yml配置
    server:port:8888servlet:context-path:/pshdhxcompression:enabled:truemime-types:application/javascript,applic......
  • php 安装 grpc 扩展
    升级gcc默认gcc的版本为4.8.5,grpc扩展需要支持c++14查询对照的话gcc6.1就可以完全至此c++14(转载至)如图:踩过的坑,重新安装升级了gcc6.5.0的版本,安装grpc还是提示如下:......
  • kotlin更牛逼的转义类似swift php的某些代码块转义
    里面任何字符都不会进行转义valtext="""for(cin"foo")//\nprint(c)"""println("kotlin的语法演示:${text}");那么转义则和java一样​​"hello\nworld"......