SHA1 и соли должно хватить (в зависимости, естественно, от того, что вы кодируете что-то для Fort Knox или систему входа в список покупок) в обозримом будущем. Если SHA1 недостаточно хорош для вас, используйте SHA256 .
Идея соли состоит в том, чтобы вывести из равновесия результаты хеширования. Например, известно, что MD5-хэш пустой строки равен d41d8cd98f00b204e9800998ecf8427e
. Итак, если кто-то с достаточно хорошей памятью увидит этот хэш и узнает, что это хэш пустой строки. Но если строка соленая (скажем, со строкой «MY_PERSONAL_SALT
»), хеш для «пустой строки» (т. Е. «MY_PERSONAL_SALT
») становится aeac2612626724592271634fb14d3ea6
, следовательно, для обратного отслеживания неочевиден. То, что я пытаюсь сказать, что лучше использовать любую соль, чем не делать этого. Поэтому не так уж важно знать какую соль использовать.
На самом деле веб-сайты делают именно это - вы можете передать ему (md5) хеш, и он выплевывает известный открытый текст, который генерирует этот конкретный хеш. Если бы вы получили доступ к базе данных, в которой хранятся простые md5-хэши, для вас было бы тривиально ввести хеш для администратора для такой службы и войти в систему. Но если бы пароли были засолены, такая служба стала бы неэффективна.
Кроме того, двойное хеширование обычно считается плохим методом, поскольку оно уменьшает пространство результатов. Все популярные хэши имеют фиксированную длину. Таким образом, вы можете иметь только конечные значения этой фиксированной длины, и результаты станут менее разнообразными. Это можно рассматривать как другую форму засолки, но я бы не рекомендовал это.