Каков наилучший способ генерации хэша для хранения сеанса? Я ищу легкое портативное решение.Каков наилучший способ создания случайного хэша/строки?
ответ
Вы можете использовать встроенные функции хеширования PHP, sha1
и md5
. Выберите один, а не оба.
Можно подумать, что использование обоих, sha1(md5($pass))
было бы решением. Использование обоих не делает ваш пароль более безопасным, его причины избыточные данные и не имеет большого смысла.
Взгляните на PHP Security Consortium: Password Hashing, они дают хорошую статью со слабыми местами и улучшают безопасность с помощью хэширования.
Nonce означает "n Используемые размеры после". Они используются при запросах на предотвращение несанкционированного доступа, они отправляют секретный ключ и проверяют ключ каждый раз, когда используется ваш код.
Вы можете проверить больше на PHP NONCE Library from FullThrottle Development
Я лично использую сервера Apache mod_unique_id для генерации случайного уникального номера для хранения своих сессий. Это очень просто использовать (если вы используете apache).
Для nonce посмотрите здесь http://en.wikipedia.org/wiki/Cryptographic_nonce есть даже ссылка на библиотеку PHP.
Возможно, uniqid() - это то, что вам нужно?
Прямо сейчас, я использую uniqid(), но я читал, что использование md5 на uniqid() не очень хорошо. –
Почему вы хотите использовать md5? Просто используйте uniqid. –
Я вообще DonT вручную управлять идентификаторы сессии. Я видел что-то в этом направлении, рекомендованное для смешивания вещей раньше, ив никогда не использовал себя, поэтому я не могу утверждать, что он лучше или хуже, чем по умолчанию (обратите внимание, что это используется с автогенером не с ручным управлением).
//md5 "emulation" using sha1
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 5);
Я не использую встроенные функции php session, так как у меня нет большого контроля над ними и, возможно, небезопасно. –
Я могу заверить вас, что они более безопасны, чем любая функция, которую вы считаете безопасной. –
bin2hex(mcrypt_create_iv(22, MCRYPT_DEV_URANDOM));
- mcrypt_create_iv даст вам случайную последовательность байтов.
- bin2hex преобразует его в ASCII текст
Пример вывода:
d2c63a605ae27c13e43e26fe2c97a36c4556846dd3ef
Bare в виду, что "лучше" это понятие относительное. У вас есть компромисс между безопасностью, уникальностью и скоростью. Вышеприведенный пример хорош для 99% случаев, хотя, если вы имеете дело с особенно чувствительными данными, вы можете прочитать о difference between MCRYPT_DEV_URANDOM and MCRYPT_DEV_RANDOM.
И, наконец, существует RandomLib «для генерации случайных чисел и строк различной силы».
Обратите внимание, что до сих пор я предположил, что вы хотите сгенерировать случайную строку, которая не является таким же, как получения хэша от значения. Для последнего см. password_hash.
Просто немного PSA: 'mcrypt_create_iv' устарел в PHP 7.1.0. Вместо этого используйте ['random_bytes'] (http://uk1.php.net/manual/en/function.random-bytes.php). –
Разные люди будут иметь разные best
способами. Но это мой путь:
- Скачать
rand-hash.php
файл: http://bit.ly/random-string-generator include()
это в PHP скрипт, который вы работаете. Затем просто позвонитеcc_rand()
функция. По умолчанию он возвращает 6 символов длиной случайную строку, которая может содержатьa-z, A-Z,
и0-9
. Вы можете передатьlength
, чтобы указать, сколько символов должно быть возвращеноcc_rand()
.
Пример:
cc_rand()
будет возвращать что-то вроде:4M8iro
cc_rand(15)
будет возвращать что-то похожее на это:S4cDK0L34hRIqAS
Ура!
Это не генерирует криптографически безопасные значения, поскольку использует ['rand()'] (https://secure.php.net/manual/en/function.rand.php). – 0b10011
Вы можете использовать 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()
доступен как РНР 7.0 (или использовать this polyfill for 5.2 through 5.6):
$hash = bin2hex(random_bytes(16));
echo serialize($hash);
Выход:
с: 32: "c8b2ca837488ff779753f374545b603c";
Используйте random_bytes(), если он доступен!
$length = 32;
if (function_exists("random_bytes")) {
$bytes = random_bytes(ceil($lenght/2));
$token = substr(bin2hex($bytes), 0, $lenght)
}
- 1. Каков наилучший способ случайного создания списка светильников?
- 2. Каков наилучший способ создания случайного значения?
- 3. Каков наилучший способ создания ресурса?
- 4. Каков наилучший способ создания синглета?
- 5. Каков наилучший способ создания «хорошего» SecureRandom?
- 6. Каков наилучший способ создания конструкторов блоков?
- 7. Каков наилучший способ создания комбинаций в порядке?
- 8. Каков наилучший способ создания «версий» загруженных файлов?
- 9. Каков наилучший способ создания функции валидатора? PHP
- 10. Каков наилучший способ создания архитектуры безопасности?
- 11. Каков наилучший способ создания NSString из int?
- 12. Каков наилучший способ создания потока итеративно?
- 13. Каков наилучший способ создания производных свойств
- 14. Каков наилучший способ создания вложенного холста opengl
- 15. Каков наилучший способ создания бесконечного цикла?
- 16. Каков наилучший способ создания модели просмотра?
- 17. JavaFX2: Каков наилучший способ создания индивидуального TreeItem?
- 18. Каков наилучший способ создания пользовательских компонентов JQuery
- 19. Каков наилучший способ создания поиска whois?
- 20. Каков наилучший способ создания карты сайта?
- 21. Каков наилучший способ создания асинхронного веб-приложения
- 22. Каков наилучший способ создания установщика Windows .NET?
- 23. Каков наилучший способ создания сложного NSCompoundPredicate?
- 24. Каков наилучший способ создания моделей инвентаря?
- 25. Каков наилучший способ создания развертываний ClickOnce
- 26. Каков наилучший способ динамического создания прослушивателя MSMQ?
- 27. Каков наилучший способ создания расширенного словаря данных?
- 28. Каков наилучший способ создания стрелок в inkscape?
- 29. Каков наилучший способ создания AngularJS ACL?
- 30. Каков наилучший способ создания функции Gmail?
Спасибо. Im собираюсь заглянуть в него –
md5 взломан, используйте sha1 –
SHA1 также можно сломать (по крайней мере теоретически). Подробнее см. В разделе «Обзор безопасности хеш-функции» (https://en.wikipedia.org/wiki/Hash_function_security_summary). Я бы пошел с SHA256 или SHA512. – colan