(Это началось как комментарий Даниэлю ДиПаоло в ответ на Мокучан.)
Если вы хотите сохранить пароль (независимо от местоположения), вы используете следующую схему:
$ hashedPassword = $ salt. хеш ($ salt. $ password);
Место хранения хешированного пароля должно быть безопасным. Будь то в базе данных или в файле с соответствующими правами доступа.
Если файл, ваша «запись» для пользователя Боб с паролем секрет будет выглядеть примерно так (с использованием BCrypt Hash):
bob:$2a$05$tlk4M8WSpVkO7ER6QGxcwuY91MrBCQn.TCDZ5eOM1iz2sCChtR62K
Никто не может «расшифровать» пароль. В этом весь смысл использования алгоритма хеширования: он необратим.
Вы утверждаете, что:
Есть некоторые инструменты, которые пытаются расшифровать md5 и sha1, и, по крайней мере, в некоторых случаях они работают
Поскольку алгоритмы хеширования необратимы, это невозможно. (Опция дешифрования отсутствует)
Мое лучшее предположение заключается в том, что вы имеете в виду инструмент, который искал хеш из предварительно вычисленной таблицы и вернул правильную строку ввода, вероятно, будет вашим паролем.
Эти таблицы называются радужными таблицами . Они могут быть побеждены А), используя случайную соль и В), используя алгоритм сильного хеширования (например, хэш BCrypt или семейство SHA2)
Относительно неправильных алгоритмов хеширования: MD5 и SHA1 считаются криптографически сломанными Другими словами: вы не должны больше их использовать.
Для обсуждения этого см .: https://stackoverflow.com/questions/2768248/is-md5-really-that-bad