Сначала не создавайте шифрование Message Digest с использованием хеш-функций.
ваш вопрос:
, но вы не можете просто зашифровать ( хэш ) свой парольиспользуя, скажем, MD5, а затем, скажем, SHA-1 (или любой другой, не имеет значения.)
, если хеш-функция не обеспечивает ни одно из этих свойств, не имеет значения, каксколько раз вы хэшировали, также злоумышленник может хэшировать n раз для получения коллизий.
Для любого данного кода h в вычислительном отношении невозможно найти такой x, что H (x) = h, это свойство называется односторонним или устойчивым к прообразу.
Для любого данного блока x в вычислительном отношении невозможно найти y ≠ x с H (y) = H (x). Это свойство относится ко второму прообразу, устойчивому к слабому столкновению
В вычислительном отношении невозможно найти любую грушу (x, y) такую, что H (x) = H (y).Это называется устойчивостью к сильным столкновениям.
Таким образом, как упоминалось в Rook, пароли сохраняются путем добавления различных значений соли для каждого пользователя.Словарь становится длиннее, а также увеличивается вычислительная нагрузка и время для злоумышленника увеличивается, если он использует файл паролей.
Допустим, злоумышленник имеет хешированные значения паролей и начинает чтение из файла словаря и сравнивает его схеширует значения, если совпадения, тогда пароль взламывается, если используется соль, то читайте из словаря и добавляйте некоторое значение соли, затем попытайтесь найти совпадение. Однако это должно быть сделано для каждого пользователя.Таким образом, сложность, которую добавляет соль, (из википедии)
Предположим, что (зашифрованный) секретный ключ пользователя украден, и он, как известно, использует одно из 200 000 английских слов в качестве своего пароля.В системе используется 32-битная соль .Соленый ключ теперь является исходным паролем, добавленным к этой случайной 32-битной соли.Из-за этой соли заранее вычисленные хэши атакующего не имеют значения.Он должен вычислить хэш каждого слова с каждой из 2 ^ 32 (4 294 967 296) возможных солей, добавленных до совпадения.Общее количество возможных входных данных можно получить, умножив количество слов в словаре на количество возможных солей:
if H(password+salt)(in system)=H(Your password+salt) (login process)
login else
print<<error