为什么rand()不是真的随机?

Áko*_*ázy 6 php random gd

我想在图像上放置随机点(空间中的星星用于一些有趣的侧面项目)

我有这个简单的脚本.

<?php
$gd = imagecreatetruecolor(1000, 1000);
$white = imagecolorallocate($gd, 255, 255, 255);

for ($i = 0; $i < 100000; $i++) 
{
    $x = rand(1,1000);
    $y = rand(1,1000);

    imagesetpixel($gd, round($x),round($y), $white);
}

header('Content-Type: image/png');
imagepng($gd);
?>
Run Code Online (Sandbox Code Playgroud)

请记住,这仅用于测试,这就是为什么我将100000放入for循环中以便显示我注意到的模式.我们有100万像素使用,仍然随机X和Y创建此模式: 在此输入图像描述

所以它远非随机.我知道rand不是真正随机的,这就是为什么它对密码学不好.但我找不到有关它如何工作的信息,我应该怎么做以避免这样的模式.

Bat*_*eba 9

线性同余随机数生成器(这是PHP rand使用的)将始终在xy图上显示自相关效应.

你将获得更好的结果mt_rand.这是Mersenne Twister发电机.