July 20, 2022

Хеширование

  • Хэш-Функция – математическое уравнение или алгоритм превращающий входящий поток неограниченного объёма в строчку символов с длинною в 256 бит.
  • Хеширование – Преобразование, производимое хеш-функцией.
  • Хэш –строчка из 256 бит – Результат хеширования

Пример хэширования с помощью sha1

Преобразуем входные данные: Sakuna

Важной особенностью хэша является то что его после преобразования нельзя будет вернуть в исходную форму (дехэшировать). Но мы можем сравнить 2 хэша для подтверждения истинности.

Зачем все это надо? Где это использовать?

Таким образом возможно производить проверку на целостность и истинность, к примеру документы и пароли. Конечно же удобней сравнивать 2 строчки в 256 бит чем объёмные файлы. На данный момент самое распространенное использование хэшей это хранение паролей.

Это механизм используется в технологии аутентификации Wifi:

  • Хранение пароля на точке доступа происходит в виде хэша;
  • Аутентификация осуществляется сравнением 2-х хэшей;
  • Посылается пакет с удачной авторизацией.

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

Как и с Wifi, онлайн сервисы не хранят ваши пароли в базе данных. Аналогичным образом при авторизации они сравнивают ваши хэши. При замене пароля они заново заносят хэш нового пароля в базу данных и оттуда уже при авторизации сравнивают ваш хэшированный пароль и хэш из базы данных. То есть даже сам сервис не может знать, как в действительности выглядит ваш пароль, потому как дехешировать невозможно.


import hashlib

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("Неверный пароль")


TELEGRAM