MD5 еще достаточно безопасным для использования в большинстве случаев [*], до тех пор, пока вы используете хороший «соль», чтобы смешать с фактическим паролем, прежде чем он зашифрован.
Существует еще неизвестный способ, кроме грубой силы, для выполнения «первой предварительной атаки» на MD5, то есть с учетом хеша, выяснить, что такое исходный пароль.
«Соль», упомянутая выше, необходима для того, чтобы ваши зашифрованные пароли не могли быть тривиально просмотрены в «таблице радуги» или других существующих списках «строка для переваривания».
Недавняя утечка паролей Linked-In является хорошим примером того, почему соль важна. Они не смогли солить пароли своих пользователей, поэтому многие пароли были тривиально отменены, потому что хэши этих паролей уже вычислены (и во многих случаях найдены через Google).
То, что вы все еще не должны делать, хотя и легко определить соль. Если злоумышленник может решить, что делает соль, все ставки отключены, потому что тогда механизмы грубой силы, описанные в статье, опубликованной Флорианом, снова становятся доступными. Хорошая соль должна быть длинной, и вы не должны использовать одну соль для каждого пользователя.
Единственные истинные недостатки, обнаруженные до сих пор в MD5, - это способы создания нового файла, которому удается привести к тому же MD5-дайджесту в качестве другого файла, когда вы уже знаете содержимое исходного файла. Это известно как «вторая предварительная атака изображения» и не имеет значения при рассмотрении использования алгоритма хеширования для шифрования паролей.
Все, что сказано, если имеется лучший алгоритм (SHA-2, bcrypt), вы можете его использовать!
[*] Я бы не использовал MD5 для чего-либо, связанного с электронной коммерцией!
Возможный дубликат [PHP может обрабатывать 40+ алгоритмов хеширования. Итак, почему md5 является стандартом de facto?] (Http://stackoverflow.com/questions/11062597/php-can-handle-40-hashing-algorithms-so-why-is-md5-the-de-facto-standard) – hakre