Password hash php расшифровка

Как я могу расшифровать хэш пароля в PHP?

Теперь предположим, что $crypted хранится в базе данных (там есть таблица «users», с именами пользователей, паролями и т.д.), и мне нужно сделать логин: я должен проверить, совпадает ли введенный пользователем пароль зашифрованный пароль, хранящийся в базе данных. Это код sql.

$sql_script = 'select * from USERS where username="'.$username.'" and password="'.$inputpassword.'"'; 

. но $inputpassword не зашифрован, поэтому он не равен тому, что хранится в поле пароля пользователей таблицы. Итак, есть функция для дешифрования после использования password_hash? Или я должен изменить свой метод шифрования? Или что еще?

Вы не можете расшифровать это. Хеш является односторонней функцией. Хэш-пароль, который пользователь дал вам, и посмотрите совпадение хэшей.

Вы не расшифровываете хэш. Вы хэш введенный пароль и сравнить два хэшей вместе. Вам не важно, какой у вас исходный пароль, вы просто заботитесь о том, чтобы хэши были одинаковыми.

Это понятие («encyptyion») не так, как работает хеширование. Используйте и существующее решение (полный код) и, пожалуйста, не изобретайте свое собственное . Как правильно хэшировать (в PHP и в других местах) обсуждалось до смерти — есть множество деталей, которые нужно рассмотреть.

4 ответа

Bcrypt — это алгоритм одностороннего хэширования, вы не можете расшифровывать хэши. Используйте password_verify, чтобы проверить, совпадает ли пароль с сохраненным хешем:

В вашем случае запустите SQL-запрос, используя только имя пользователя:

$sql_script = 'select * from USERS where username="'.$username.'"'; 

И выполните проверку пароля в PHP, используя код, аналогичный приведенному выше примеру.

Изменить: Построение запроса таким образом очень опасно. Если вы не избежите ввода правильно, код будет уязвим для атак SQL-инъекций. См. this SO ответ о том, как предотвратить SQL-инъекцию.

@user2864740 user2864740 Мы не знаем, правильно ли экранирован $username , мы можем только надеяться. 🙂

@user2864740 user2864740 Добавил примечание к моему ответу. Я не могу предложить лучший запрос, потому что я не знаю, использует ли OP mysqli, PDO или какой-либо ORM.

Спасибо за добавление примечания (и ссылка хорошая) — я всегда рекомендую заполнители, но это для другого вопроса: |

Тем не менее, учитывая, сколько кода просто копируется, без особого внимания, предупреждение является крошечным.

Пароли не могут быть дешифрованы, так как это сделает уязвимость для пользователей. Таким образом, вы можете просто использовать метод password_verify() для сравнения паролей.

if(password_verify($upass, $userRow['user_pass'])) < //code for redirecting to login screen >

где $upass — пароль, введенный пользователем, а $userRow[‘user_pass’] — поле user_pass в базе данных, которое зашифровывается функцией password_hash() .

Кажется, кто-то наконец создал script, чтобы расшифровать пароль_hash. checkout this one: https://pastebin.com/Sn19ShVX

 linux # \r\n -> windows $list = explode("\n", file_get_contents($argv[1])); # change \n to \r\n if you're using windows # ------------------- # $hash = '$2y$10$BxO1iVD3HYjVO83NJ58VgeM4wNc7gd3gpggEV8OoHzB1dOCThBpb6'; # hash here, NB: use single quote (') , don't use double quote (") if(isset($argv[1])) < foreach($list as $wordlist) < print " [+]"; print (password_verify($wordlist, $hash)) ? "$hash ->$wordlist (OK)\n" : "$hash -> $wordlist (SALAH)\n"; > > else < print "usage: php ".$argv[0]." wordlist.txt\n"; >?> 

1. Это не дешифрование, это атака грубой силой. 2. Попробуйте, рассчитайте время на 100 000 password_hash password_hash. 3. Этот метод хорошо известен, и смысл password_hash состоит в том, чтобы потреблять существенные такты ЦП, чтобы сделать атаку методом перебора очень трудоемкой. Это лучшее, что мы можем сделать.

да, не расшифровывай. но это не атака Брюса, если они делают это на своем ПК / сервере . это зависит от большой коллекции (базы данных, списка слов) пароля, как они делают с такой большой базой данных MD5.

1. Это все еще атака грубой силой, то есть метод, не имеет значения, кто или где это сделал. 2. это не похоже на атаку по радужной таблице MD5, потому что в password_hash задействовано случайное начальное число, поэтому вычисление password_verification должно выполняться для каждого пробного пароля. 3. Стоимость должна быть выбрана так, чтобы password_verification занимало около 100 мс, что существенно медленнее, чем MD5 пароля, который обычно может быть рассчитан менее чем за 0,01 мс, так что password_verification примерно в 100 000 раз медленнее, чем MD5 в ЦП того же класса, на котором рассчитывался password_hash ,

Мне нужно расшифровать пароль. Пароль зашифрован с помощью password_hash.

$password = 'examplepassword'; $crypted = password_hash($password, PASSWORD_DEFAULT); 

Мне не понятно, если вам нужно password_verify , или вы пытаетесь получить несанкционированный доступ к приложению или базе данных. Другие говорили о password_verify , поэтому здесь вы можете получить несанкционированный доступ. Его плохие парни часто делают, когда пытаются получить доступ к системе.

Сначала создайте список паролей с открытым текстом. Список простых текстовых сообщений можно найти в нескольких местах из-за серьезных нарушений данных от компаний, таких как Adobe. Сортируйте список, а затем возьмите верхние 10 000 или 100 000 или около того.

Во-вторых, создайте список переваренных паролей. Просто зашифруйте или хешите пароль. Основываясь на вашем коде выше, он не выглядит как соль используется (или ее фиксированная соль). Это делает атаку очень легкой.

В-третьих, для каждого переваренного пароля в списке выполните выбор в попытке найти пользователя, который использует пароль:

$sql_script = 'select * from USERS where password="'.$digested_password.'"' 

Итак, вместо того, чтобы выбирать пользователя и пытаться изменить пароль, плохой парень выбирает общий пароль и пытается найти пользователя, который его использует. Коэффициенты на стороне плохого парня.

Поскольку плохой парень делает эти вещи, вам будет нужно не позволить пользователям выбирать общие пароли. В этом случае взгляните на ProCheck, EnFilter или Hyppocrates (и др.). Они фильтруют библиотеки, которые отклоняют плохие пароли. ProCheck обеспечивает очень высокое сжатие и может переваривать многомиллионные списки паролей слов в файл данных 30 КБ.

Я не думаю, что ОП пытался что-то взломать, и, кроме того, у вас должны быть полномочия администратора на сервере, на котором вы пытаетесь грубой силой.

@LeoWilson — он хочет восстановить пароль. Для этого недостаточно быть администратором, так как пароль хешируется.

Ещё вопросы

  • 0 Анимация относительных спрайтов в CSS
  • 0 Как я могу установить точки на картах Google, используя php и местоположения из базы данных?
  • 0 используйте оператор запятой для инициализации базового класса
  • 0 Таблица обновлений php массива bind_param после цикла
  • 1 Как я могу создать локализуемый UserControl?
  • 0 Получить изображение SRC в рамках директивы
  • 1 Реализовать функцию Sliding Drawer как
  • 1 Получение файлов из программных файлов
  • 1 Установка нового сервера Glassfish на Eclipse Indigo
  • 0 Как выполнить модульное тестирование контроллера с обратным вызовом в AngularJS
  • 1 Как мой usercript может работать до запуска inline-javascript?
  • 1 Удаление строк, содержащих NaN, при сохранении индекса
  • 0 Удаление определенной части массива PHP
  • 0 Как динамически в параметризованном конструкторе?
  • 1 Получить данные JSON после их сохранения в переменной
  • 0 SQL Query — Счет и сумма — Спортивная статистика
  • 0 PHP HTTP Почтовый сервер — не могу получить почтовые запросы
  • 1 Android Constraint Layout alignemnt
  • 1 Как транслировать канал YouTube (например, Mecca Live) в своем приложении?
  • 1 Настройки парсера DOM, чтобы избежать атаки XML Injection
  • 1 Как добавить пули в powerpoint
  • 1 Как я могу обрабатывать изображения с OpenCV параллельно, используя многопроцессорность?
  • 0 Ошибка cPanel Mysql
  • 0 Приложение Phonegap для Android — загрузка неверного значка данных в динамически генерируемый
  • 1 Как мне сделать многомерный регрессионный анализ в Python?
  • 1 Как я могу определить параметр в функции.
  • 1 Unity — CommandInvokationFailure: сборка Gradle завершилась неудачно
  • 0 SQL Получить два столбца с Да или Нет
  • 0 Как динамически генерируемые элементы
  • 1 Сброс проверки подлинности с помощью форм в веб-методе
  • 0 Управление ролями в Angularjs для отображения и скрытия вкладок
  • 0 MySQL выбрать отличное значение (и подсчитать количество значений)
  • 1 Как создать операцию между числами?
  • 1 Используйте разные поля для проверки в ASP.NET Identity
  • 1 Как разбить строку на слова?
  • 0 Получить геометрические кординаты из таблицы Oracle
  • 1 Есть несколько хороших конструкторов, и Room выберет конструктор без аргументов. Как решить это предупреждение
  • 1 Как Node.js конвертирует ваш код в события?
  • 0 Подсчитать количество промежутков до пролета с определенным идентификатором
  • 1 Как преобразовать список из списка слов в виде строк?
  • 0 Добавление URL сайта в заголовок сайта
  • 1 Действия в андроид студии не переключаются после нажатия кнопки
  • 0 Лучший способ перенаправить старый URL на новый URL
  • 1 Как исправить таймер при прокрутке на RecyclerView на Android?
  • 0 Угловой модуль отложенной реализации
  • 1 Строка заменяет логику
  • 0 положить элементы d3.js на слайдер
  • 1 Как проанализировать вывод Json из API Visistat с помощью Json.net
  • 1 Разрешение захваченного изображения OpenCV против фотоаппарата
  • 1 Вызов функции JavaScript из ASP.NET Razor

Источник

Читайте также:  Css templates for forums
Оцените статью