является mt_rand () более безопасным, чем rand ()

Вчера я услышал разговор о rand() и mt_rand() , коллега сказал, что оба они предсказуемы, и вы должны использовать разные функции? Мне было интересно, я знаю, что rand() предсказуем каким-то образом и после некоторого поиска. Даже mt_rand() кажется предсказуемым, если я правильно это прочитал.

Для этого я написал небольшой фрагмент кода, который создает изображение:

 <?php header("Content-type: image/png"); $im = imagecreatetruecolor(512, 512) or die("Cannot Initialize new GD image stream"); $white = imagecolorallocate($im, 255, 255, 255); $black = imagecolorallocate($im, 0, 0, 0); for ($y = 0; $y < 512; $y++) { for ($x = 0; $x < 512; $x++) { if (rand(0, 1)) { imagesetpixel($im, $x, $y, $white); } else{ imagesetpixel($im, $x, $y, $black); } } } imagepng($im); imagedestroy($im); ?> 

этот код выводит это изображение, так как вы можете видеть, что у него есть какой-то шаблон: Изображение rand ()

в то время как функция mt_rand() дала мне этот результат: Изображение mt_rand ()

теперь мой вопрос: действительно ли mt_rand() что предсказуемо, кажется мне случайным для меня по сравнению с функцией rand() .

Solutions Collecting From Web of "является mt_rand () более безопасным, чем rand ()"

Непосредственно из документов :

Эта функция не генерирует криптографически безопасные значения и не должна использоваться для криптографических целей. Если вам требуется криптографически безопасное значение, попробуйте вместо этого использовать openssl_random_pseudo_bytes ().

mt_rand генерирует лучшие случайные числа, чем rand , и намного быстрее. Но это не делает его «безопасным» в том смысле, что его следует использовать для криптографии. Является ли он достаточно безопасным для вашего приложения, является довольно субъективным.