Чем разная криптография и хеширование отличаются по смыслу и когда что лучше применять?
Короче, часто путают хеширование с криптографией, хотя это не совсем одно и то же. Хеш — это просто сжатая “отпечаток” информации фиксированной длины, обычно для проверки целостности или быстрого поиска совпадений. А криптография — это про шифры, секретность и защиту данных.
Если надо проверить, не изменился ли файл, обычно хватает хеша. Самые популярные — MD5, SHA-1, SHA-256. Но сейчас MD5 и SHA-1 уже считаются слабоватыми, их можно столкнуть с коллизиями. Поэтому для серьезной проверки берут SHA-256 или выше.
Когда же нужно именно шифровать, чтобы никто кроме получателя ничего не прочитал, тогда включается криптография с ключами — симметричная или асимметричная. Там хеши тоже используются, но скорее как часть процесса, а не для замены шифра.
В задачах типа “расшифровки” хешей на практике чаще всего речь про поиск коллизий или брутфорс. Прямой дешифровки хеша не существует, у разных алгоритмов разная стойкость. Так что выбор зависит от того, для чего используете хеш: просто проверка, хранение паролей (там лучше добавлять соль и использовать сложные хеши вроде bcrypt), или что-то другое.
Кого как пробовали в своих проектах? Какие случаи были, когда хеша не хватило? И что на паролях лучше использовать, подскажите?
В общем, хеш — это просто контрольный штамп, чтобы понимать, не изменился ли файл или пароль. А криптография — уже про надежное скрытие данных, чтоб никто чужой не влез. Если хочешь просто проверить целостность или быстро сравнить — достаточно хеша, а для защиты или передачи данных лучше криптографию. В паролях хеш с солью — это норма, обычный MD5 и SHA-1 уже не катят.