Хэширование паролей

Существует множество функций для хэширования строк. Обычно они используются для хранения паролей. Допустим, к вам попал в руки дамп какой-то базы данных. Проблем нет, если пароли хранятся в открытом виде (есть и такое). Чуть сложнее, если их прогнали через какую-либо функцию хэширования.

Хэширование - преобразование массива входных данных произвольной длины в выходную битовую строку установленной длины, выполняемое определённым алгоритмом. Самыми распространенными функциями являются md5 и sha1. Они обе небезопасны, т.к. существует множество баз данных, по которым можно проверить хэши паролей. Поэтому, если пароль зашифрован без дополнительных действий (о них дальше), то это сравнимо (практически) отсутствию хэширования.

Что можно предпринять для усложнения подбора пароля по заданному хэшу? Во-первых, это соль - дополнительная строка, которая прибавляется к паролю. Она неизмена и служит как раз-таки для того, чтобы усложнить поиск по хэшу. Примеры использования соли представлены ниже (для функции md5):

md5(pass + salt);
md5(md5(pass) + salt);
md5(md5(salt + md5(pass) + salt));
и т.д.

Для безопасности данных советуют использовать не напрямую данные функции, а специальные функции для хэширования паролей (в php, например, это функция password_hash (более подробно в документации по этой ссылке).