Значение validationKey может иметь от 40 до 128 символов. Настоятельно рекомендуется использовать ключи максимально возможной длины. Значение decryptionKey может иметь 16 или 48 символов. Если определено 16 символов, то будет использовано шифрование по стандарту DES (Data Encryption Standard — Стандарт шифрования данных). Если определено 48 символов, то будет использоваться тройное шифрование по стандарту DES (Triple DES или 3DES). (Тройное шифрование означает, что алгоритм DES будет применен три раза подряд.) Взломать шифр 3DES гораздо сложнее, чем DES, поэтому рекомендуется всегда использовать 48 символов для decryptionKey. Если задаваемая длина или один из ключей будут выходить за пределы допустимых значений, ASP.NET вернет страницу с сообщением об ошибке при запросе приложения.

Создавать собственные ключи проверки достоверности и расшифровки не имеет большого смысла. Если же вы все-таки попытаетесь это сделать, они не будут в достаточной мере случайными, что сделает их неустойчивыми перед некоторыми типами атак. Приемлемым вариантом является генерирование строгого случайного ключа с помощью кода и криптографических классов .NET Framework (из пространства имен System.Security.Cryptography).

Далее показана функция CreateMachineKey(). Которая создает случайную серию байтов с помощью криптографически строгого генератора случайных чисел. Метод CreateMachineKey() принимает один параметр, который определяет количество используемых символов. Результатом является шестнадцатиричный формат, который необходим для файла machine.config.

public static string CreateMachineKey(int length)
{
  // Создание массива байтов.
  byte[] random = new byte[length/2];

  // Создание криптографически строгого генератора случайных чисел.
  RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

  // Заполнение массива байтов случайными байтами.
  rng.GetBytes(random);

  // Создание StringBuilder для хранения результата, после того
  // как он будет преобразован в шестнадцатеричный формат.
  System.Text.StringBuilder machineKey = new System.Text.StringBuilder(length);

  // Перебор массива случайных байтов и добавление каждого
  // значения к StringBuilder.
  for (int i = 0; i < random.Length; i++)
  {
    machineKey.Append(String.Format("{0:X2}", random[i]));
  }

  return machineKey.ToString();   
}

Вы можете использовать эту функцию в Web-форме для создания требуемого ключа. Например, следующий фрагмент кода создает 48-символьный ключ шифрования и 128-символьный ключ проверки достоверности и отображает значения в двух отдельных текстовых полях:

предыдущая    следующая страница   оглавление

215

Hosted by uCoz