Хеш-функция определяется как функция, которая отображает большой объем данных на фиксированное значение заданной длины. Эта функция гарантирует, что один и тот же вход приводит к одному и тому же выводу, который фактически определяется как хэш-сумма. Хэш-сумма включает в себя характеристику с конкретной информацией.
Эту функцию практически невозможно вернуть. Таким образом, любая сторонняя атака, такая как атака грубой силы, практически невозможна. Также этот вид алгоритма называется односторонним криптографическим алгоритмом .
Идеальная криптографическая хеш-функция имеет четыре основных свойства —
- Должно быть легко вычислить значение хеша для любого заданного ввода.
- Должно быть невозможно генерировать исходный ввод из его хеша.
- Должно быть невозможно изменить вход без изменения хэша.
- Должно быть невозможно найти два разных входа с одинаковым хешем.
пример
Рассмотрим следующий пример, который помогает сопоставлять пароли с использованием символов в шестнадцатеричном формате.
import uuid import hashlib def hash_password(password): # userid is used to generate a random number salt = uuid.uuid4().hex #salt is stored in hexadecimal value return hashlib.sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt def check_password(hashed_password, user_password): # hexdigest is used as an algorithm for storing passwords password, salt = hashed_password.split(':') return password == hashlib.sha256(salt.encode() + user_password.encode()).hexdigest() new_pass = raw_input('Please enter required password ') hashed_password = hash_password(new_pass) print('The string to store in the db is: ' + hashed_password) old_pass = raw_input('Re-enter new password ') if check_password(hashed_password, old_pass): print('Yuppie!! You entered the right password') else: print('Oops! I am sorry but the password does not match')
блок-схема
Мы объяснили логику этой программы с помощью следующей блок-схемы —
Выход
Наш код выдаст следующий результат:
Дважды введенный пароль соответствует хэш-функции. Это гарантирует, что пароль, введенный дважды, является точным, что помогает собирать полезные данные и сохранять их в зашифрованном формате.