Edit:
См. Пример реализации Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.HashAlgorithmProvider. Шаги хеширования:
- Если SaltEnabled, генерировать случайные байты для длины соли с помощью RNGCryptoServiceProvider.
- Добавьте соль в открытый текст.
- Хэш соленого открытого текста.
- Затем (это важный шаг), снова добавьте соль к хешу .
Для сравнения с хешированным текстом вы должны использовать:
public bool CompareHash(byte[] plaintext, byte[] hashedtext)
против перефразирования и сравнения. Если вы перефразируете, генерируется новая случайная соль, и вы потерялись.
CompareHash выполняет следующие действия:
- Снимает неотмешанную соль с хеш-текста. Помните, что он был добавлен на шаге 4 выше.
- Использует эту соль для вычисления хэша для открытого текста.
- Сравнивает новый хеш с хештекстом минус соль. Если они одинаковы - правда, иначе ложь.
Оригинал:
"если соль включена на HashProvider, провайдер сгенерирует случайную последовательность байтов, которая будет добавлена к хешу. Если вы сравните хешированное значение с нехешированным значением, соль будет извлечена из хешированного значения и используется для хеширования неперехваченного значения до сравнения. "
и
"Что касается декодирования как хеш-значения. Это невозможно сделать. После создания хеш-функции не должно быть способа преобразовать это в исходное значение.
Однако, что вы можете сделать, это сравнить не хэшированное значение с хэшированным значением, применив тот же алгоритм и сравнив выходные данные. "
С http://www.codeplex.com/entlib/Thread/View.aspx?ThreadId=10284