Ошибки с хешами, которые чаще всего делают и как с этим жить
Видел много ситуаций, когда народ просто не понимает, почему хеши не сходятся или почему защита в приложении слабая. Основные проблемы — это использование слабых алгоритмов (MD5 и SHA1 ещё живы в проектах), неправильное хранение солей (да, соль не должна быть одной на всех и лежать в открытом виде), и непонимание, что хеш — это не то же самое, что шифр, то есть обратного преобразования не будет.
Если проверяешь свои хеши, сначала глянь, какой алгоритм применяется и есть ли соль. Часто люди халтурят с солью, думают, что один и тот же хеш — это норм, а на деле любой сможет атаковать через радужные таблицы. Потом стоит проверить, как соль добавляется — до хеша или после, в каком формате. И что важно: если соль постоянная, её лучше переставлять хотя бы раз в проекте.
Решение? Во-первых, переходить на что-то посильнее, чем SHA1 и уж тем более MD5. Сейчас многие юзают bcrypt, scrypt или Argon2 — они заточены под защиту паролей и тянут вычисления дольше, что важно. Во-вторых, соль должна быть уникальной для каждого юзера, а её хранить отдельно или вместе в базе — вопрос безопасности инфраструктуры.