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

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

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

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

Это код sql …

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

… но $ inputpassword не зашифрован, поэтому он не равен тому, что хранится в поле пароля пользователей таблицы …

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

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

 <?php // See the password_hash() example to see where this came from. $hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; if (password_verify('rasmuslerdorf', $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; } ?> 

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

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

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

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

Мне нужно расшифровать пароль. Пароль зашифрован с помощью функции 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 КБ.

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

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

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

похоже, что кто-то наконец создал скрипт для дешифрования пароля. Оформить заказ: https://pastebin.com/Sn19ShVX

 <?php error_reporting(0); # Coded by L0c4lh34rtz - IndoXploit # \n -> 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"; } ?>