К примеру, вы разрабатываете приложение которое показывает пользователю картинки. Для этого предварительно скачивает их из интернета. Но вот беда, связь плохая, пару битов потерялось и пользователю показывается битая картинка или вообще приложение падает.
Или представьте, вы сделали сайт. Пользователи регистрируются, делают свои пользовательские дела, лайкают, пишут новости. А пришел злоумышленик и украл пароли.
Для решения проблем в данных примерах нам поможет хеш или же хеш-сумма.
Хеш - это представление данных, чисел или строк произвольной длины, набором символов фиксированной длины, вычисленным по определенному алгоритму. Функция, которая вычисляет с помощью этого алгоритма конечный набор символов, называется хеш-функцией. А процесс получения хеша - хешированием.
С помощью хеш-функции мы получаем хеш:
Можно сказать, что хеш, это цифровой отпечаток данных. Теперь, передав перед файлом его хеш-сумму, мы поймем, что файл передан поврежденым. Также, теперь нет необходимости хранить пароли пользователей в чистом виде. Достаточно сохранить хеш пароля и при входе пользователя, хешировать пароль, и сравнивать с тем, что у нас храниться.
Теперь возникает другая проблема: так как у нас фиксированное количество символов в хеше (а обычно это не много, 128 или 256 бит), возникает вероятность вычисления одинаковых хешей. Данное совпадение хешей называется коллизией.
Проблема коллизии решается сложностью алгоритма хеш-функции. Но из-за сложности вырастает требование к ресурсам. Поэтому, где требуется подтвердить целостность файла, используются не сложные алгоритмы, а для хранения важных данных используются криптостойкие сложные алгоритмы.
Напоследок, примеры хешей разных алгоритмов слова тест
:
MD5: 098f6bcd4621d373cade4e832627b4f6
SHA1: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
CRC32: accf8b33