Почему хеши не расшифровываются и как с этим работать?
Постоянно вижу вопросы про «расшифровку» хешей, и, честно, много кто путает саму суть. Хеш — это не шифр, а контрольная сумма, которая по определению необратима. Это значит, что с хешем нельзя просто взять и вернуть исходную строку — никакими магическими способами.
Что же тогда проверять, если у тебя есть хеш? Обычно проверяют совпадение: генерят хеш снова из предполагаемых данных и сравнивают. Если совпало — значит исходник такой же. Тут нет никакой расшифровки, просто вычисление.
Если хотите проверить хеш, всегда сначала убедитесь, что алгоритм, соль и прочие параметры совпадают. Часто проблемы в том, что кто-то забыл соль или взял неправильный алгоритм (MD5 вместо SHA-256, например), и тогда смысл проверки теряется.
Про «взлом» хешей тоже отдельная тема — если хеш слаб, типа MD5 или SHA-1, подбирают коллизии или брутят, но это долго и далеко не факт, что вы вытащите исходник. Поэтому лучше ставить современные алгоритмы и использовать соли.
Коротко — расшифровать хеш нельзя, можно только проверять. Если думаете, что «потеряли пароль», который хешировали, то единственный безопасный выход — менять его и хранить новый хеш с нормальной защитой.
Кто тут как решает вопросы с проверкой хешей в своих проектах? Какие лайфхаки работают?