Generate random bytes using OpenSSL or Mcrypt and mt_rand() as fallback.
17 {
18 if (!
defined(
'PHP_WINDOWS_VERSION_BUILD') && extension_loaded(
'openssl')) {
19 $secure = null;
20 $rand = openssl_random_pseudo_bytes($length, $secure);
21 if (false !== $rand && $secure === true) {
22 return $rand;
23 }
24 }
25
26 if (extension_loaded('mcrypt')) {
27
28
29 if (
30 strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' ||
31 version_compare(PHP_VERSION, '5.3.7') >= 0
32 ) {
33 $rand = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
34 if ($rand !== false && strlen($rand) === $length) {
35 return $rand;
36 }
37 }
38 }
39
40
41 $rand = '';
42 for (
$i = 0;
$i < $length;
$i++) {
43 $rand .= chr(mt_rand(0, 255));
44 }
45 return $rand;
46 }