2008-09-24 4 views
3

Как создается соль в HashProvider в Microsoft Enterprise Library, когда мы устанавливаем SaltEnabled?Что такое соль в корпоративной библиотеке HashProvider? (Ключ SaltEnabled)

Это случайные для новых машин? Это какое-то магическое число?

(я знаю, что это соль, вопрос в том, что фактическое значение а/соль в Enterprise Library HashProvider)

ответ

4

Edit:

См Microsoft.Practices.EnterpriseLibrary.Security.Cryptography. HashAlgorithmProvider для примера реализации. Этапы хеширования:

  1. Если SaltEnabled, генерируйте случайные байты для длины соли, используя RNGCryptoServiceProvider.
  2. Добавить соль в открытый текст.
  3. Хеш соленый открытый текст.
  4. Затем (это важный шаг) добавьте соль снова в хэш.

Для сравнения с хеширован текста, вы должны использовать:

public bool CompareHash(byte[] plaintext, byte[] hashedtext) 

против перепевы и сравнения. Если вы перефразируете, генерируется новая случайная соль, и вы теряетесь.

CompareHash выполняет следующие действия:

  1. Тянет не-хэшируются соли приподнятого над hashtext. Помните, что это было добавлено на шаге 4 выше.
  2. Использует эту соль для вычисления хеша для открытого текста.
  3. Сравнивает новый хэш с hashedtext минус соль. Если они одинаковые - true, else false.

Оригинал:.

«, если соль включена на HashProvider, провайдер будет генерировать случайную последовательность байт, которая будет добавлена ​​в хэш Если сравнить значение хэша с unhashed значения, соль будет извлекаться из хеш-значения и использоваться для хэш-значения без потери, до сравнения ».

и

«Что касается декодирования в качестве хэш-значения. Это не может быть сделано. После создания хэша не должно быть никакого способа изменить это в исходное значение. Однако то, что вы можете сделать, это сравнить unhashed-value с хеш-значением, помещая его через тот же алгоритм и сравнивая вывод ».

От http://www.codeplex.com/entlib/Thread/View.aspx?ThreadId=10284

+0

«, если соль включена на HashProvider, провайдер будет генерировать случайная последовательность байтов, которая будет добавлена ​​в хэш. " Но тогда это не сработает, потому что эта случайная соль должна быть сохранена или должна быть статичной, по крайней мере, для каждой машины. – 2008-10-14 11:25:08

0

Слегка оффтоп:

Эта соль используется для предотвращения Радужные атак. Радужная атака представляет собой попытку выяснить, какая строка, для которой этот хеш был вычислен на основе очень большого (исчерпывающего/несколько гигабайт) словаря предварительно вычисленных хэшей.

'Uncle' Jeff имеет blog entry about this.

Кроме того вы можете посмотреть в Википедии:

http://en.wikipedia.org/wiki/Rainbow_table

0

Так что я пару лет слишком поздно, я думаю, но я понимаю, что новое случайное значение соли создается каждый раз при создании хэш.

0

Я ответил на аналогичный вопрос о корпоративной библиотеке и значение соли, которое оно использует для хэширования.

Вы можете увидеть его здесь: https://stackoverflow.com/a/27247012/869376

Подсветки:

  1. соль является случайным массивом 16 байт.
  2. Он генерируется с помощью метода CryptographyUtility.GetRandomBytes(16); в пространстве имен Microsoft.Practices.EnterpriseLibrary.Security.Cryptography. Это в конечном счете вызывает метод библиотеки С названием [DllImport("QCall", CharSet = CharSet.Unicode)] private static extern void GetBytes(SafeProvHandle hProv, byte[] randomBytes, int count);
  3. Первых 16 байт в кодировке Base64 является солью, которая была использована для хэширования исходного значения

 Смежные вопросы

  • Нет связанных вопросов^_^