Intereting Posts
Как вы фильтруете результаты API WikiVoyage по городу? Как получить общее количество элементов в таблице DynamoDB? Рассчитать количество занятых дней в течение периода с использованием MySQL и PHP Команда php exec (или аналогичная), чтобы не дождаться результата Может ли злонамеренный хакер изменить скрытую переменную Ищете легкий PHP-стек для разработки на Windows Геттер и сеттер? Почему правое смещение -1 всегда дает -1 в PHP? php DOMDocument: полное преобразование элемента формы? обертывание и удаление? см., если переменная равна любым другим переменным в списке php Ошибка синтаксиса MySQL ON DUPLICATE KEY UPDATE YII CDBCommand getText, чтобы показать все переменные в SQL Ориентированный на производительность способ защиты файлов на уровне PHP? Codeigniter, когда я нажимаю delete, я хочу всплывающее уведомление, если при нажатии «да» или нет Подключение к базе данных с ODBC приводит к предупреждению и непечатанию

базовый php pbkdf2 хеширование

Я относительно новичок в php и только начинаю понимать смысл соли, когда речь идет о хэшировании паролей (я думаю?). В любом случае, вот моя проблема …

Прямо сейчас у меня есть база данных mysql с именем пользователя, паролем, солевым полем. Длина поля пароля составляет 64 символа, поле соля – 3 символа. В реестре каждому имени пользователя назначается случайная соль. У меня нет никаких проблем с этим (я считаю). Во-первых, желаемый пароль пользователя хешируется с помощью:

$hashedinput = hash ('sha256', $input); 

После этого пользовательский пароль будет хэшироваться с солью, включенной в pbkdf2, следующей процедурой и введенной в базу данных:

 $password = pbkdf2('sha256', $hashedinput, $salt, 10000, 64); 

Моя проблема заключается в входе в систему. При сравнении хешированного пароля в базе данных с паролем, который вводит пользователь, он всегда возвращается! =. Вот что я делаю, чтобы проверить логин:

 $userData = mysql_fetch_array($search, MYSQL_ASSOC); $inputhash = hash('sha256', $input); // From Form $salt = $userData['salt']; // Salt from DB $password = pbkdf2('sha256', $inputhash, $salt, 10000, 64); $knownpassword = $userData['password']; // Known password from DB 

Таким образом, для устранения неполадок я выбрал все выходы, и это то, на что похоже, когда я ввожу пароль CORRECT (и он не входит в систему):

Введите пароль: 3d8bc905668c1a1cca5b53a78941d3ca4673e12df6ac5e98e19fa47b153406f6e66913e43bf60478907ca07429b0cf90c808ce2097e0544cc44d298bfb7b85ad

DB пароль: 3d8bc905668c1a1cca5b53a78941d3ca4673e12df6ac5e98e19fa47b153406f6

Обратите внимание, что пароль ввода имеет первые 64 символа, но он продолжает работать на 128 символов. Пароль БД – всего 64.

Спасибо заранее!

Томас Птачек написал замечательную статью , пояснив – в какой-то степени – какая соль, почему она полезна и дала правилу № 1, которое вам нужно запомнить о системах хэширования паролей:

Используйте чужую систему паролей. Не создавайте свои собственные.

Если вы собираетесь использовать PHP 5.5 в своем приложении, используйте новый API password_hash ; если вы этого не сделаете, убедитесь, что используете хотя бы PHP 5.3 и используете библиотеку совместимости user_hash . Они предназначены для того, чтобы избавить вас от этой боли.