środa, 19 września 2012

Pseudolosowe wartości w PHP

Gaz, en.wikipedia
Prosta sprawa, ale w gdy się poszuka php random string to można znaleźć straszne głupoty. No, ale zwykle są artykuły starszej daty. W PHP jest wiele gotowych rozwiązań (rand, mt_rand, uniqid, array_rand, openssl_random_pseudo_bytes), ale często źle używanych.


Działania matematyczne

Są dwa dedykowane rozwiązania generujące integer w danym zasięgu: rand i mt_rand. Zdecydowanie należy wybierać ten drugi - jest szybszy i o większym zasięgu.
mt_rand( int $min, int $max )

Unikalny identyfikator

W kwestii ID pomocny jest uniqid, ma on dwa parametry: mało przydatny prefix i powiększenie entropii.

uniqid( string $prefix, bool $entropy )

Tablice

W przypadku potrzeby wylosowania wartości z tablicy jest array_rand. Wystarczy podać tablicę i opcjonalnie ilość elementów do zwrócenia.
array_rand( array $input, int $number = 1 )

Bezpieczeństwo

Najważniejszą wspomnianą funkcją jest openssl_random_pseudo_bytes. Jest przeznaczony stricte do zadań takich jak generowanie soli dla hasła. Jako że zwraca dane binarne wraz z nim warto użyć bin2hex.
bin2hex( openssl_random_pseudo_bytes() )