Intereting Posts
имея http ссылки на странице https, но не скрипты или css Обновление строк в цикле while php Преобразование многомерного массива в один массив PHP – определить страну Ошибка загрузки PHP (пустой $ _FILES) php регулярное выражение для преобразования строки, за которой следует число, в несколько строк, за которыми следует одна из цифр Передача метода объекта array_map () Добавление вертикального текста с помощью fpdf / fpdi в php CodeIgniter – загрузка нескольких файлов одним вводом Карты Google – панорамирование и масштабирование по областям – маркеры не появляются при увеличении или панорамировании – ПОМОЩЬ! Не удалось подключиться к Google Cloud sql Как предотвратить распространение почты от спама? Атрибут переменной атрибута: настройка каждого отображаемого текстового значения кнопок радио PHP, когда заголовок цикла и таблицы отображается только в том случае, если установлено значение db Назначить значение jquery переменной php

Как вы генерируете криптографически безопасные случайные числа с PHP?

Возможный дубликат:
Безопасное генерирование случайных чисел в PHP

Нам нужно создать криптографически случайную строку для использования в качестве токена аутентификации, которая будет привязана к данным сеанса в базе данных. Мы используем PHP, у которого нет встроенного генератора случайных чисел. Как мы можем генерировать криптографически безопасную случайную строку длины N, используя php?

Также обратите внимание, что из-за природы нашего приложения shell_exec отключен от таблицы.

Solutions Collecting From Web of "Как вы генерируете криптографически безопасные случайные числа с PHP?"

как насчет uniqid ? В документах есть пример того, как его можно использовать для файлов cookie / сеансов.

В зависимости от вашей платформы вы можете использовать / dev / urandom или CAPICOM. Это прекрасно описано в этом комментарии от Mark Seecof :

«Если вам нужны некоторые псевдослучайные биты для безопасности или криптографические цели (яйцо, случайное IV для блочного шифрования, случайная соль для хэша паролей) mt_rand () – плохой источник. На большинстве плат Unix / Linux и / или MS-Windows вы можете получить более высокий класс псевдослучайных битов из ОС или системной библиотеки, например:

 <?php // get 128 pseudorandom bits in a string of 16 bytes $pr_bits = ''; // Unix/Linux platform? $fp = @fopen('/dev/urandom','rb'); if ($fp !== FALSE) { $pr_bits .= @fread($fp,16); @fclose($fp); } // MS-Windows platform? if (@class_exists('COM')) { // http://msdn.microsoft.com/en-us/library/aa388176(VS.85).aspx try { $CAPI_Util = new COM('CAPICOM.Utilities.1'); $pr_bits .= $CAPI_Util->GetRandom(16,0); // if we ask for binary data PHP munges it, so we // request base64 return value. We squeeze out the // redundancy and useless ==CRLF by hashing... if ($pr_bits) { $pr_bits = md5($pr_bits,TRUE); } } catch (Exception $ex) { // echo 'Exception: ' . $ex->getMessage(); } } if (strlen($pr_bits) < 16) { // do something to warn system owner that // pseudorandom generator is missing } ?> 

NB: в целом безопасно оставлять как попытку чтения / dev / urandom, так и попытку доступа к CAPICOM в вашем коде, хотя каждый из них будет терпеть неудачу на платформе другого пользователя. Оставьте их обоих там, чтобы ваш код был более портативным ».

Сверху моей головы: возьмите микро-время, умножьте его на microtime% 100 и сделайте несколько randoms на sha1 полученного результата.