Intereting Posts
Создание лидеров, как я буду показывать показ ранга / позиции? phpseclib – Могу ли я подключиться с использованием имени пользователя, ключа и пароля (а не ключевой фразы) Как установить значение по умолчанию для поля формы в Symfony2? Получите наименьшую сумму комбинации матричных элементов Рекурсивный поиск и замена элементов массива PHP Как лучше настроить PHP для обработки веб-сайта UTF-8 Строгая стандартная ошибка php Использование случайной соли sha512 с паролем sha512 Шаги для отладки php Curl на окнах PHP Неустранимая ошибка: класс 'Dotenv' не найден в Получить ключ от многомерного массива? Транслитерировать любой конвертируемый utf8 char в эквивалент ascii iOS push-уведомление не работает с использованием PHP является спокойным, предназначенным только для веб-служб ИЛИ для веб-сервисов и веб-страниц? сумма строк не обновляется при запуске AJAX-кода до обновления F5

Каков наилучший способ создания случайного хэша / строки?

Каков наилучший способ генерации хэша для хранения сеанса? Я ищу легкое портативное решение.

Вы можете использовать встроенные функции хеширования PHP, sha1 и md5 . Выберите один, а не оба.

Можно подумать, что использование обоих, sha1(md5($pass)) будет решением. Использование обоих не делает ваш пароль более безопасным, его причины избыточные данные и не имеет большого смысла.

Взгляните на PHP Security Consortium: Хеширование паролей дает хорошую статью с недостатками и улучшает безопасность с хешированием.

Nonce означает, что « n umbers используется один раз ». Они используются при запросах на предотвращение несанкционированного доступа, они отправляют секретный ключ и проверяют ключ каждый раз, когда используется ваш код.

Вы можете узнать больше в библиотеке PHP NONCE от FullThrottle Development

 bin2hex(mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)); 
  1. mcrypt_create_iv даст вам случайную последовательность байтов.
  2. bin2hex преобразует его в текст ASCII

Пример вывода:

 d2c63a605ae27c13e43e26fe2c97a36c4556846dd3ef 

Готовьте, что «лучший» – относительный термин. У вас есть компромисс между безопасностью, уникальностью и скоростью. Вышеприведенный пример хорош для 99% случаев, хотя, если вы имеете дело с особенно чувствительными данными, вы можете прочитать о различии между MCRYPT_DEV_URANDOM и MCRYPT_DEV_RANDOM .

Наконец, существует RandomLib «для генерации случайных чисел и строк различной силы».

Обратите внимание, что до сих пор я предполагал, что вы хотите создать случайную строку , которая не совпадает с получением хеша из значения. Для последнего см. Password_hash .

Может быть, uniqid () – это то, что вам нужно?

uniqid – создать уникальный идентификатор

Вы можете использовать openssl_random_pseudo_bytes с php 5.3.0 для генерации псевдослучайной строки байтов. Вы можете использовать эту функцию и каким-то образом преобразовать ее в строку, используя один из этих методов:

 $bytes = openssl_random_pseudo_bytes(32); $hash = base64_encode($bytes); 

или

 $bytes = openssl_random_pseudo_bytes(32); $hash = bin2hex($bytes); 

Первый будет генерировать кратчайшую строку с числами, строчными буквами, прописными буквами и некоторыми специальными символами (=, +, /). Вторая альтернатива будет генерировать шестнадцатеричные числа (0-9, af)

random_bytes() доступно с PHP 7.0 (или используйте этот полиполк с 5.2 по 5.6 ):

 $hash = bin2hex(random_bytes(16)); echo serialize($hash); 

Вывод:

с: 32: "c8b2ca837488ff779753f374545b603c";

Я лично использую mod_unique_id apache для создания случайного уникального номера для хранения моих сеансов. Это очень просто использовать (если вы используете apache).

Для nonce посмотрите здесь http://en.wikipedia.org/wiki/Cryptographic_nonce, есть даже ссылка на библиотеку PHP.

Обычно я не управляю идентификаторами сеансов вручную. Я видел что-то в этом направлении, рекомендованное для смешивания вещей раньше, ив никогда не использовал себя, поэтому я не могу утверждать, что он лучше или хуже, чем по умолчанию (обратите внимание, что это используется с автогенером не с ручным управлением).

 //md5 "emulation" using sha1 ini_set('session.hash_function', 1); ini_set('session.hash_bits_per_character', 5); 

Используйте random_bytes (), если он доступен!

$length = 32;

 if (function_exists("random_bytes")) { $bytes = random_bytes(ceil($lenght / 2)); $token = substr(bin2hex($bytes), 0, $lenght) } 

Проверьте это на php.net

У разных людей будут разные best способы. Но это мой путь:

  1. Загрузите этот файл rand-hash.php : http://bit.ly/random-string-generator
  2. include() в скрипте php, с которым вы работаете. Затем просто вызовите cc_rand() . По умолчанию он возвращает случайную строку длиной 6 символов, которая может включать az, AZ, и 0-9 . Вы можете передать length чтобы указать, сколько символов должно возвращаться cc_rand() .

Пример:

  1. cc_rand() вернет что-то вроде: 4M8iro

  2. cc_rand(15) вернет нечто похожее на это: S4cDK0L34hRIqAS

Ура!