Хэширование и контроль пароля

valerq444

Новичок
Пользователь
Июн 18, 2022
3
1
3
Напишите программу, которая запрашивает у пользователя пароль и выдает пользователю хэш этого пароля. Затем программа проверяет, присутствует ли этот хэш в базе данных утекших паролей. Если да, то программа выводит пользователю количество вхождений и просит ввести новый пароль, если нет, то пишет, что пароль правильный и завершает работу.

Пример работы программы:

Пожалуйста, введите пароль для подтверждения: dsfsd
Хэш вашего пароля: 6BC86383D9369BA9E85855EAE96EBCC7C9551014
Пароль появляется 120 раз в базе данных утекших паролей.
Пароль не совпадает. Выберите новый пароль.

Пожалуйста, введите пароль для подтверждения: sdfsfsdfsdfsd
Хэш вашего пароля: 6CF12B7C7C922836062442987B3BDEE5F8A75E29
Пароль появляется 19 раз в базе данных утекших паролей.
Пароль не совпадает. Выберите новый пароль.

Пожалуйста, введите пароль для подтверждения: ps8dyfsdyhsdiufhsd
Хэш вашего пароля: F6B171F68FF8629211CAE22E2E1D808C43BA9822
Пароль появляется 0 раз в базе данных утекших паролей.
Пароль правильный.

Возможный алгоритм работы программы:

1. Попросите пользователя ввести пароль.
2. Преобразовать пароль в хэш алгоритмом sha-1, используя кодировку utf-8.
3. Вырезать из хеша первые 5 символов и сделать запрос к серверу.
4. Отправить запрос на сервер и получить ответ от сервера.
5. Сделайте необходимые преобразования с ответом, чтобы конечный результат был в виде информации, которую мы можем пройти в цикле.
6. Проверяем, есть ли наш хеш в списке полученных хэшей.
7. Если да, то мы выведем количество появлений и запросим новый пароль, если нет, то прекратим работу.

import hashlib
import requests

def salted_password():
password = input('Sisestage palun salasõna kontrollimiseks: ')
return hashlib.sha1(password.encode('utf-8')).hexdigest().upper()

hash_pwd = salted_password()
s_query = u'https://api.pwnedpasswords.com/range/{}'.format(hash_pwd[:5])

try:
pwd_list = requests.get(s_query)

# ваши действия с результатом запроса

except requests.exceptions.ConnectionError:
print('Нет соединения с сервером.')
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
Python:
import requests
import hashlib

def salted_password(password):
    return hashlib.sha1(password.encode('utf-8')).hexdigest().upper()

def get_passwords(password):
    hash_pwd = salted_password(password)
    print('Хэш вашего пароля:', hash_pwd)
    s_query = f'https://api.pwnedpasswords.com/range/{hash_pwd}'
    return len(requests.get(s_query).text.splitlines())

while x := get_passwords(input('Введите пароль: ')):
    print(f'Пароль появляется {x} раз в базе данных утекших паролей\n')
print('Это хороший пароль!')

убрал обрезание хэша, а то слишком много совпадений в базе
 
  • Мне нравится
Реакции: valerq444

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
А в чем вопрос?

P.s. как вставлять код:
1647162378032-png.1702
 

valerq444

Новичок
Пользователь
Июн 18, 2022
3
1
3
как получить этот вывод из сервера: Пароль появляется 120 раз в базе данных утекших паролей
 

valerq444

Новичок
Пользователь
Июн 18, 2022
3
1
3
Python:
import requests
import hashlib

def salted_password(password):
    return hashlib.sha1(password.encode('utf-8')).hexdigest().upper()

def get_passwords(password):
    hash_pwd = salted_password(password)
    print('Хэш вашего пароля:', hash_pwd)
    s_query = f'https://api.pwnedpasswords.com/range/{hash_pwd}'
    return len(requests.get(s_query).text.splitlines())

while x := get_passwords(input('Введите пароль: ')):
    print(f'Пароль появляется {x} раз в базе данных утекших паролей\n')
print('Это хороший пароль!')

убрал обрезание хэша, а то слишком много совпадений в базе
Спасибо!
 
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов