В криптографии и работе с хешами обычно подводят банальные вещи — например, использовать слабый алгоритм, забыть соль, или неправильно обрабатывать данные перед хешированием. Особенно часто вижу, как люди берут MD5 или SHA1 без соли и думают, что это защищено. В итоге безопасный хеш превращается в легкую добычу для радужных таблиц.
Еще момент — неправильное хранение хешей. Кто-то зачем-то хеширует уже закодированные строки (типа base64), и это накладывает на защиту лишние проблемы, неожиданно меняя результат. При проверке всегда нужно смотреть, что именно хешируется, какая кодировка исходных данных и есть ли дополнительное преобразование.
Если нужно проверить хеш, можно сначала удостовериться, какой алгоритм используется и правильно ли сгенерирован соль (лучше применять уникальную соль для каждого объекта). Потом прогнать пару тестов с известными значениями, чтобы не путать формат хеша (иногда в базах путают hex и base64). В идеале — использовать проверенные библиотеки, а не придумывать что-то своё.
Кого интересует, могу поделиться примером скрипта на Python, который помогает сравнивать разные варианты хешей и искать ошибки в алгоритмах. А у вас какие грабли вылавливали при работе с хешами?
Чёт часто сталкивался с тем, что народ просто садит MD5 без соли и думает, что защитился на все 100%. А потом удивляются, когда всё легко взламывается. Раньше тоже напарывался — думал, главное хеш сделать, а про формат и соль не парился. Теперь хоть чуть больше бдительности, потому что неправильная кодировка или лишние преобразования могут удивить сильнее, чем хакеры.
Самое частое — нежелание заморачиваться с солью и выбор устаревших алгоритмов типа MD5, из-за чего защита превращается в фарс. Лучше сразу взять что-то современное и добавлять уникальную соль, а не просто хешировать как попало.