Из того, что я прочитал, SHA-2 небезопасен, и вам нужно использовать более сильное шифрование. Я видел, что в PHP вы можете использовать password_hash()
.
Будет ли вывод этой функции достаточным для шифрования?
Из того, что я прочитал, SHA-2 небезопасен, и вам нужно использовать более сильное шифрование. Я видел, что в PHP вы можете использовать password_hash()
.
Будет ли вывод этой функции достаточным для шифрования?
Я нашел ответ Stackoverflow на английском языке, который отвечает на вопрос Безопасный хэш и соль для паролей PHP .
Ответ, получивший наибольшее количество голосов, гласит, что вам не следует хешировать с помощью SHA1, MD5 или SHA256, потому что современные взломщики могут превышать 180 миллиардов хэшей в секунду, поэтому им нетрудно его взломать.
А второй по количеству голосов рекомендует не писать собственный механизм, а использовать функцию PHP
password_hash()
. Примерpassword_hash()
:Алгоритм BCRYPT создаст строку длиной не более 72 символов, которая каждый раз будет разной при шифровании, поэтому для проверки правильности введенного пароля мы должны использовать функцию
password_verify()
:Лучший вариант (согласно руководству по PHP) — использовать password_hash() для шифрования ключа, а затем извлечь его из базы данных с помощью password_verify() .
Хотя возможность включения вашей собственной $salt включена в функцию password_hash(), рекомендуется не использовать соль и предоставить это PHP, который генерирует ее автоматически и является намного более безопасным, чем любой тип соли, который мы можем включить. самостоятельно, любым способом, который приходит нам в голову. На самом деле, в различных частях руководства по PHP настоятельно рекомендуется НЕ использовать собственную соль для ключей, выгружаемых в эту функцию, поскольку это ослабит ее силу. (На самом деле, в версии 7 PHP этот параметр уже считается устаревшим и будет выдавать ошибку во время выполнения).
Что касается параметра «стоимость», который можно добавить, это дополнительная мера безопасности, но ее необходимо учитывать в зависимости от сервера, на котором используется указанная функция, из-за нагрузки на сервер для создания хэша более надежного ключа. .
Предлагаемый код:
В целом, стоимость 12 вполне безопасна и создает приемлемую нагрузку на сервер (как правило, в некоторых случаях необходимо будет выполнить различные тесты, чтобы оценить, что «функция занимает менее 100 миллисекунд в интерактивных системах). "-СИК-). Если массив, содержащий указанную стоимость, не указан (он должен быть да или да включен в массив), его значение по умолчанию равно 10.
Пример проверки ключа, полученного из БД, по сравнению с ключом, введенным пользователем, будет примерно таким:
Как всегда, если вам нужна дополнительная информация, всегда лучше обратиться к источнику: PHP.NET — функция Password_hash() .
В дополнение к ответу Карлоса Кироги хорошей возможностью является использование динамической соли на основе пароля пользователя. Например:
Однако безопасное сохранение пароля в базе данных — не единственное, о чем нужно беспокоиться, поскольку вам нужно покрывать различные слабые места возможных атак. Одна из возможностей — использовать случайно созданные токены безопасности на странице входа для предотвращения атак типа CSRF. Это был бы очень краткий и простой пример, но демонстрирующий идею:
Токен можно хранить в базе данных, в таблице пользователей и сравнивать в файле безопасности, особенность токена уникальна для каждого пользователя и сеанса.
Таким образом, у вас есть зашифрованный пароль пользователя и динамический пароль, который никто не знает.
Пытаться:
Взгляните на эту ссылку:
http://www.solingest.com/blog/store-passwords-in-mysql
В чем проблема
SHA-2
? Возможно, вы имеете в виду, что семьяSHA-1
уязвима (так и есть) Рекомендуемый минимумSHA256
. Но чем он лучше, тем выше безопасность. На самом деле, он считаетсяSHA512
оченьSalt
безопасным.тест
md5($var);
вполне безопасен, подробнее можно прочитать здесьhttp://php.net/manual/es/function.md5.php
Мне приходит в голову, что вы можете записать блок нулей или другого символа и зашифровать его с помощью модуля php mcrypt, и когда пользователь вводит пароль, программа просто проверяет, остается ли блок в исходном символе.