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