展开

关键词

PHP随机数函数rand()与mt_rand()的讲解

PHP中rand()与mt_rand()都是用于产生一个指定范围内单独随机数的函数,如果需要产生多个不重复的随机数,请参考:PHP生成指定范围内的N个不重复的随机数。 rand() 函数默认使用 libc 随机数发生器,很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且效率很低;mt_rand() 则是用了 Mersenne Twister 中已知的特性作为随机数发生器 所以在PHP中mt_rand()函数是非正式用来替换rand()的。 语法: rand(min,max) mt_rand(min,max) min,max 皆为可选,规定随机数产生的范围。 例如,想要 1 到 100(包括 1 和 100)之间的随机数,用 rand(1, 100) 或 mt_rand(1,100)。

93830

深入理解PHP中mt_rand()随机数的安全

前言 在前段时间挖了不少跟mt_rand()相关的安全漏洞,基本上都是错误理解随机数用法导致的。 伪随机数 mt_rand()并不是一个 真·随机数 生成函数,实际上绝大多数编程语言中的随机数函数生成的都都是伪随机数。 php //pid2.php echo mt_rand(); <? 有了种子我们就能计算出任意次数调用mt_rand()生成的随机数了。 它可以根据单次mt_rand()的输出结果直接爆破出可能的种子(上面有示例),当然也可以爆破类似mt_rand(1,100)这样限定了MIN MAX输出的种子(下面实例中有用到)。

14220
  • 广告
    关闭

    一大波轻量级工具升级重磅来袭

    代码传递思想,技术创造回响!Techo Day热忱欢迎每一位开发者的参与!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    讨论rand和mt_rand的区别之前,请先确定PHP版本

    在php7.1之前,rand和mt_rand是有一定区别的。 ? php7.1以下,一般推荐使用mt_rand生成随机数。网上有很多描述是因为速度的原因。但是不仅仅是因为速度原因。 mt_rand使用了更好的算法生成随机数。确定随机种子需要更多的输出结果,而且参数随机数的速度更快。 当然,这是以往的内容。 的内部实现: PHP_FUNCTION(mt_rand) { zend_long min; zend_long max; int argc = ZEND_NUM_ARGS(); 内容实现内容是一样的,除了mt_rand 会对最大值小于最小值的情况抛出警告信息。 下次再被问到rand,和mt_rand的区别,请先确认php版本。

    31710

    第一次学习PHP

    .= ''.mt_rand(0, 9).' .= ''.mt_rand(0, 9).' ', '.mt_rand(0, 255).')">'.mt_rand(0, 9).'

    10120

    php绘制图片验证码

    );     //背景色     $back_color = imagecolorallocate($im, mt_rand(0,100),mt_rand(0,100), mt_rand(0,100) );     //文本色     $text_color = imagecolorallocate($im, mt_rand(100, 255), mt_rand(100, 255), mt_rand (0, 255), mt_rand(0, 255), mt_rand(0, 255));         imagearc($im, mt_rand(- $width, $width), mt_rand (- $height, $height), mt_rand(30, $width * 2), mt_rand(20, $height * 2), mt_rand(0, 360), mt_rand(0,  (0, 255), mt_rand(0, 255), mt_rand(0, 255));         imagesetpixel($im, mt_rand(0, $width), mt_rand(0

    56250

    PHP code 验证码生成类定义和简单使用示例

    (170, 255), mt_rand(170, 255), mt_rand(170, 255)); } /** * 深颜色 * @return int */ protected function darkColor () { return imagecolorallocate($this- image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120)); } /* (0, $this- width), mt_rand(0, $this- height), $this- darkColor()); } } /** * 添加干扰线 */ protected function drawArc() { for ($i = 0; $i < $this- number - 3; $i++) { imagearc($this- image, mt_rand(5, $this- width ), mt_rand(5, $this- height), mt_rand(5, $this- width), mt_rand(5, $this- height),mt_rand(0, 70), mt_rand

    17210

    PHP 图片验证码的问题

    //定义需要的黑色 19: 20: 21: for ($i=1; $i<=100; $i++) { 22: imagestring($aimg,1,mt_rand (1,$img_height),mt_rand(1,$img_width),"@",imagecolorallocate($aimg,mt_rand(200,255),mt_rand(200,255), mt_rand(200,255))); 23: } 24: 25: //为了区别于背景,这里的颜色不超过200,上面的不小于200 26: for ($i=0;$i<strlen ($authnum);$i++){ 27: imagestring($aimg, mt_rand(3,5),$i*$img_height/4+mt_rand(2,7),mt_rand(1, $img_width/2-2), $authnum[$i],imagecolorallocate($aimg,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)))

    38920

    ThinkPHP 3.2.3实现加减乘除图片验证码

    (1,150), mt_rand(1,150), mt_rand(1,150)); // 验证码使用随机字体 $ttfPath = $_SERVER['DOCUMENT_ROOT'].' (1,9); $b = mt_rand(1,9); $operate_array = array('+', '-', '*'); $key = mt_rand(0, count($operate_array (150,225), mt_rand(150,225), mt_rand(150,225)); for($j = 0; $j < 5; $j++) { // 绘杂点 imagestring($this - _image, 5, mt_rand(-10, $this- imageW), mt_rand(-10, $this- imageH), $codeSet[mt_rand(0, 29)], $noiseColor (1, $this- imageH/2); // 振幅 $b = mt_rand(-$this- imageH/4, $this- imageH/4); // Y轴方向偏移量 $f = mt_rand

    16550

    php实现算术验证码功能

    (100,200),mt_rand(100,200),mt_rand(100,200)); imagesetpixel($img,mt_rand(0,$width),mt_rand(0,$height ),$pixColor); } //干扰线 for ($i = 0;$i < 4;$i++){ $lineColor = imagecolorallocate($img,mt_rand (0,120),mt_rand(0,120),mt_rand(0,120)); imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand (0,$width),mt_rand(0,$height),$lineColor); } //定义一个数组存放运算符号 $arr = ['+','-','*']; //计算数组的长度 );//将数组转为字符串 $textColor = imagecolorallocate($img,mt_rand(100,200),mt_rand(100,200),mt_rand(100,200

    26220

    PHP对验证码的认证过程

    .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } $_SESSION['code'] = strtoupper($randCode); (30, 180), mt_rand(10, 100), mt_rand(40, 250)); for($i = 0; $i < 5; $i++){ $x = $i * 13 + mt_rand(0 , 4) - 2; $y = mt_rand(0, 3); $text_color = imagecolorallocate($img, mt_rand(30, 180), mt_rand(10, 100), mt_rand(40, 250)); imagechar($img, 5, $x + 5, $y + 3, $randCode[$i], $text_color); } for($j = 0; $j < 60; $j++){ $x = mt_rand(0,70); $y = mt_rand(0,22); imagesetpixel($img,$x,$y,$pixColor); }

    41820

    记一次PHP伪随机数漏洞

    mt_srand&mt_rand函数分析 ​ 我们来看这两个函数,首先mt_srand(seed)通过分发seed种子,接着靠mt_rand()函数来生成随机数。 php mt_srand(012010); echo mt_rand(); ?> 运行测试后 ? 然后我们就来多输出几次随机数,相信在下面的测试你就明白了这个伪随机数的漏洞 <? php mt_srand(012010); echo mt_rand().PHP_EOL; echo mt_rand().PHP_EOL; echo mt_rand().PHP_EOL; echo mt_rand 我们在代码里看到了mt_srand和mt_rand两个函数 并且看到了mt_srand($_SESSION['seed'])可以知道session是用的随机数设置的。 =substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1); } echo $str; ?> ? 得到flag! ?

    45940

    C语言生成固定范围的随机数

    include <stdlib.h>     //随机数 #include <string.h>     //字符串操作函数 #include <sys/time.h>    // time() int mt_rand     int arr[10000][2]={0};     srand(time(0));     for (int i = 0; i < 10000; ++i) {         int num = mt_rand ],arr[j][1]);     }     return 0; } /**  * 根据区间随机  * @param start  * @param end  * @return  */ int mt_rand

    93410

    PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】

    (0,255) 生成一个更具有唯一性的随机数 #000 255 $color = imagecolorallocate($image,mt_rand(100,255),mt_rand(100,255 //随机生成验证码文字 ab3g $color = imagecolorallocate($image,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100)) (100,150),mt_rand(100,150),mt_rand(100,150)); imageline($image,mt_rand(0,$this->_width),mt_rand (0,$this->_height),mt_rand(0,$this->_width),mt_rand(0,$this->_height),$color); } # 4.设置100个干扰像素点 for($i=0;$i<100;$i++){ imagesetpixel($image,mt_rand(0,$this->_width),mt_rand(0,$this->_height

    9820

    如何在PHP中生成随机数

    第一种方法用mt_rand() function GetRandStr($length){ $str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 '; $len=strlen($str)-1; $randstr=''; for($i=0;$i<$length;$i++){ $num=mt_rand(0,$len); $randstr .= $str start,length);返回字符串的一部分 return $rands; } 第五种开始创建验证码(直接用函数生成,比较方便快捷) $code = rand(10000, 99999); php mt_rand 输出: run time 86.178064 ms 执行时间上比较,因为lcg_value()直接是php原生方法,而mt_rand()与mt_getrandmax()需要调用两个方法,并需要进行计算 2.随机效果比较 基于mt_rand()与mt_getrandmax()算法的随机效果 <?

    27710

    PHP全栈学习笔记25

    //设置画布颜色 for($i=0;$i<strlen($num);$i++){ //循环读取随机数 $x = mt_rand (1,8)+$imagewidth*$i/4; $y = mt_rand(1,$imageheight/4); $color=imagecolorallocate($numimage ,mt_rand(0,150),mt_rand(0,150),mt_rand(0,150)); //定义图像的颜色 imagestring($numimage,5,$x,$y,$num[

    19040

    PHP实现微信红包金额拆分试玩的算法示例

    bonus_money = 200; $this->money_single_max = 60; } private function randomFloat($min = 0, $max = 1) { $mt_rand = mt_rand(); $mt_getrandmax = mt_getrandmax(); echo 'mt_rand=' . $mt_rand . ', mt_getrandmax=' . $mt_getrandmax . '


    '; return $min + $mt_rand / $mt_getrandmax * ($max - $min); } //计算 public function compute

    15020

    火山无水印最新API短链接版

    curl模拟get请求 function myCurl($one, $two = '', $three = ''){ $ch = curl_init(); $ip = mt_rand (11, 191) . "." . mt_rand(0, 240) . "." . mt_rand(1, 240) . "." . mt_rand(1, 240); $UserAgent

    12140

    mysql的索引

    0; $y <= 100; $y++) {//每个协程插入100条数据                 $data = [                     'user_id'     => mt_rand (strtotime('2018-01-01'), strtotime('2019-01-01'))),//随机生成日期                     'update_time' => mt_rand (100, 1024)),//随机生成100-1024位汉字,                     'description' => getChar(mt_rand(8, 64)),//随机生成8- 64位汉字,                     'status'      => mt_rand(0, 1),                 ];                 $mysqlObject (0xB0, 0xD0)) . chr(mt_rand(0xA1, 0xF0));         // 转码         $b .= iconv('GB2312', 'UTF-8', $a);

    19210

    扫码关注云+社区

    领取腾讯云代金券