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