Я поражен тем, как люди прыгают на подножку «черт, он сломан, я не буду его использовать!», Не делайте ту же ошибку.
Вы не можете сделать MD5 лучше. Даже использование SHA-1 уязвимо к тем же типам атак, что и MD5.
Использование bcrypt будет использовать ОЧЕНЬ больше ЦП, чем алгоритмы MD5 и SHA.
MD5 разработан, чтобы быть быстрым, так же, как SHA. bcrypt - нет, и он допускает больше перестановок, что затрудняет попытки расшифровки исходной строки.
Вам нужно знать, почему MD5 считается "сломанным".
- Поскольку можно быстро вычислить радужную таблицу паролей длиной до 6 символов .
Используя сегодняшние вычислительные мощности, можно создать массив символов и MD5 всех перестановок и отобразить их в исходную строку. Вот так вы получаете радужный стол. Если кто-то загрузит вашу базу данных, а затем сравнит пароли со своей радужной таблицей - он может получить оригинальный пароль пользователя. Причина, по которой это опасно, заключается в том, что люди используют одни и те же пароли для многих вещей, включая PayPal и другие службы обработки денег. Вот почему вы используете так называемую соль. Это усложняет получение исходной строки, так что соление паролей ваших пользователей (скажем, путем их перестановки и MD5-обращения к обратному вводу) затруднит злоумышленнику вернуть хэш к исходной строке.
Что такое столкновение? Если вы даете хеш-функции две разные строки и она возвращает один и тот же хеш - это коллизия. Как это перевести на веб и хэширование паролей для входа в систему? Если у вас одинаковый хеш для user1 / password1 и user2 / password2 - они могут войти в систему как кто-то другой. Вот где столкновения играют роль в безопасности.
Причина, по которой MD5 считается неработающим, заключается в том, что MD5 возвращает одинаковый хэш для строк, которые отличаются небольшим процентом. И не легко вычислить, какой может быть эта строка!
С математической точки зрения - да, она «сломана», потому что если ваша строка имеет 100 символов и отличается от другой строки на 10 символов (разница 10%) - вы получите тот же хеш.
То, что относится к MD5, применимо ко ВСЕМ алгоритмам хеширования. В конце концов, все они не имеют бесконечного количества возможных хэшей.
Однако некоторые из них (например, MD5) имеют меньше возможных хэшей и выполняются быстрее.
В конце концов, если кто-то попал в вашу базу данных - у вас есть большая проблема, чем использование MD5 вместо bcrypt или SHA1.