Короче говоря: AES является обратимой.Хеш-функция отсутствует.
В ответ на принятый ответ ... (извините, я новый пользователь, пока не могу оставлять комментарии ...) Соль только предотвращает атаки на основе Rainbow Table.Он не защищает "слабые пароли".Чтобы защитить более слабые пароли, вам нужно будет использовать хеш-функцию, которая оказалась медленной.Правильно настроенный bcrypt - это самый простой способ сделать это.MD5 и SHA1 слишком быстры, чтобы быть в безопасности.(Столкновения, обнаруженные с MD5, не связаны с этой проблемой, которую я описываю)
Все 8-символьные пароли, зашифрованные с помощью MD5 или SHA1 (даже если они правильно посолены), могут быть взломаны этот чувак за один раздень .Соление НЕ предотвращает такого рода атаки.«Оптимизация» атаки будет состоять только из ~ 500 тыс. Слов в английском языке ... и 10 000 наиболее распространенных их вариантов взломают огромное количество паролей.
BCrypt сильнее против такой атакипотому что он (может быть настроен) в миллионы раз медленнее, чем MD5.Итеративное использование MD5 миллион раз теоретически позволит добиться того же, но я предлагаю вам придерживаться хорошо протестированных библиотек, а не использовать собственную реализацию.BCrypt, конечно, также использует Salting и доступен на большинстве языков программирования.Так что нет причин НЕ использовать его.
Теоретически, SCrypt лучше, но он слишком новый (и поэтому реализации, вероятно, все еще немного глючат)
Короче говоря: SHA512 против Blowfish и Bcrypt