Хеширование
- Хэш-Функция – математическое уравнение или алгоритм превращающий входящий поток неограниченного объёма в строчку символов с длинною в 256 бит.
- Хеширование – Преобразование, производимое хеш-функцией.
- Хэш –строчка из 256 бит – Результат хеширования
Пример хэширования с помощью sha1
Преобразуем входные данные: Sakuna
Важной особенностью хэша является то что его после преобразования нельзя будет вернуть в исходную форму (дехэшировать). Но мы можем сравнить 2 хэша для подтверждения истинности.
Зачем все это надо? Где это использовать?
Таким образом возможно производить проверку на целостность и истинность, к примеру документы и пароли. Конечно же удобней сравнивать 2 строчки в 256 бит чем объёмные файлы. На данный момент самое распространенное использование хэшей это хранение паролей.
Это механизм используется в технологии аутентификации Wifi:
- Хранение пароля на точке доступа происходит в виде хэша;
- Аутентификация осуществляется сравнением 2-х хэшей;
- Посылается пакет с удачной авторизацией.
Первый хэш поступает от клиента в тот момент, когда вы вводите пароль на устройстве и отправляете его, перед отправкой пароль хэшируется по заданной хэш-функции. При приеме на стороне точки доступа происходит сравнение 2 хэшей, тот который в базе (этот хэш задается при настройке роутера) и тот который со стороны клиента. При условии что они совпали, посылается пакет с удачной авторизацией. Всё вышеописанное необходимо для защиты точки доступа.
Как и с Wifi, онлайн сервисы не хранят ваши пароли в базе данных. Аналогичным образом при авторизации они сравнивают ваши хэши. При замене пароля они заново заносят хэш нового пароля в базу данных и оттуда уже при авторизации сравнивают ваш хэшированный пароль и хэш из базы данных. То есть даже сам сервис не может знать, как в действительности выглядит ваш пароль, потому как дехешировать невозможно.
clien_pass = 'Sukuna'
wifi_server_pass = '3b765a9e960649fb4e3f0ad92c8807139a1509634d08ac7b39b6b8346fce6cb0'
hash_clien_pass = hashlib.sha256(clien_pass.encode('utf-8')).hexdigest()
if wifi_server_pass == hash_clien_pass:
print("Вы вошли в систему")
else:
print("Неверный пароль")