Самые частые косяки с хешами и как их быстро выловить
Парни, сталкивался с кучей граблей при работе с хешами — решил собрать в одно место, что чаще всего ломает всю идею и как это проверить.
1. Используете неправильный алгоритм. Много кто путает md5, sha1, sha256 — убедитесь, что именно тот, который нужен. Проверьте документацию и совпадение названий в коде и хранилище.
2. Не учитываете соль. Хеш без соли в современных условиях — почти нонсенс. Если соль есть, она должна быть добавлена перед хешированием и точно такой же — при проверке.
3. Формат хранения. Иногда хеши заливаются в базу с пробелами, переводом строки, в неправильном регистре. Быстро проверяйте длину и формат.
4. Ошибки конвертации кодировок — если данные до хеширования конвертируются из UTF-8 в что-то другое, результат может сбиться. Просто пробуйте, например, явно указать кодировку.
5. Кэширование старых значений. Часто у скрипта данные не обновляются, и кажется, что хеш неправильный, хотя просто не сгенерировался новый.
6. Использование устаревших или криво работающих библиотек. Проверьте, нет ли обновлений или багов в тех, что используете.
7. Неправильное сравнение результатов — некоторые забывают, что сравнивать надо именно одинаковый тип (строка со строкой).
Если на ходу проверить — просто попробуйте генернуть хеш вручную из известного тестового значения и сравнить с тем, что у вас выходит.
Тоже заметил, что многие заливают хеши в базу с лишними пробелами или в неправильном регистре — потом голову ломают, почему сравнение не проходит. И да, соль не просто так нужна, без неё уже почти не актуально. Ещё частая тема — забывают, что кодировка входных данных должна быть всегда одна и та же, иначе хеши будут разные даже для одинаковых строк. В целом, нормальный сборник проблем.