Часто сталкиваюсь с тем, что после генерации хеша и попытки его проверки значения не совпадают. Обычно это из-за простых, но важных моментов. Вот что чаще всего подводит:
1. Кодировка. Если при хешировании входные данные в utf-8, а при сверке в cp1251 — хеш уж точно будет другой. Проверяю всегда руками, что строка одинаковая по битам.
2. Разные форматы вывода хеша. Где-то hex, где-то base64. Иногда просто забываешь, что в итоге сравниваешь. Лучше фиксировать формат на старте и не смешивать.
3. Заводские баги или особенности библиотек. В некоторых языках или фреймворках hashing functions могут возвращать не то, что ожидал: строку с лишними пробелами или байты в другом порядке. Пробую всегда вывести raw output и сверить.
4. Неучтённый перенос строки или пробел в конце входной строки. Частенько вставляешь из какого-то источника или копируешь и забываешь очистить.
5. Иногда проблема в том, что хешируют не то, что нужно. Например, пытаются взять хеш пароля, а подставляют вместе с солью на этапе сверки или наоборот.
Если раньше кто-то сталкивался с такими нюансами — расскажите, как боретесь? Или может я что-то упускаю?