Привет, я хочу использовать пакет под названием Kunststube-CSRFP на моем проекте
Проблема в том, что пакет выдаст исключение на компьютерах с Windows, потому что dev / random недопустим для Windows.
Функция вызывает исключение ниже ..
protected function getRandomHexStringFromDevRandom($length) {
static $sources = array('/dev/urandom', '/dev/random');
foreach ($sources as $source) {
if (@is_readable($source)) {
return bin2hex(file_get_contents($source, false, null, -1, $length / 2));
}
}
throw new \RuntimeException('No system source for randomness available.');
}
В соответствии с php.net можно также использовать функцию mcrypt_create_iv ..
И вот мой подход к решению этой проблемы совместимости ..
protected function getRandomHexStringFromDevRandom($length) {
//static $sources = array('/dev/urandom', '/dev/random');
srand(time());
$iv = mcrypt_create_iv($length, MCRYPT_RAND);
if($iv){
return bin2hex($iv);
}
throw new \RuntimeException('No system source for randomness available.');
}
У меня нет машины Linux, чтобы проверить, возвращает ли обе функции одинаковые результаты ..
Версия php: 5.5.12
Вы должны использовать openssl_random_pseudo_bytes()
генерировать случайные строки по двум причинам:
/dev/random
Но вы должны включить расширение OpenSSL в PHP, иначе вы получите ошибку.
Код:
protected function getRandomHexStringFromDevRandom($length) {
if(!extension_loaded("openssl")){
throw new \RuntimeException("OpenSSL extension not loaded");
}
$cstrong = false;
while(!$cstrong) {
$rand = openssl_random_pseudo_bytes($length, $cstrong);
}
return $rand;
}
Других решений пока нет …