Отображение имен алгоритмов на криптографические классы

Обновлен: Ноябрь 2007

Существует четыре способа создания криптографического объекта с помощью SDK (пакет средств разработки программного обеспечения) для Windows:

  • создание объекта с помощью оператора new;

  • создание объекта, реализующего конкретный криптографический алгоритм, с помощью метода Create, относящегося к абстрактному классу данного алгоритма;

  • создание объекта, реализующего конкретный алгоритм шифрования, с помощью метода System.Security.Cryptography.CryptoConfig.CreateFromName;

  • создание объекта, реализующего класс алгоритмов шифрования (например, симметричный блочный шифр) с помощью метода Create , относящегося к абстрактному классу алгоритмов данного типа (например, SymmetricAlgorithm).

Предположим, что разработчику нужно вычислить хэш-код SHA1 для набора байтов. Пространство имен System.Security.Cryptography содержит две реализации алгоритма SHA1: одна — полностью управляемая реализация, другая оборачивает CryptoAPI. Разработчик может создать экземпляр конкретной реализации SHA1 (например, SHA1Managed class) с помощью оператора new. Однако если не имеет значения, какой класс загружается средой CLR в процессе реализации классом хэш-алгоритма SHA1, объект можно создать, вызвав метод System.Security.Cryptography.SHA1.Create. Этот метод вызывает метод System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1"), который возвращает реализацию хэш-алгоритма SHA1.

Разработчик может также вызвать System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1"), поскольку по умолчанию конфигурация шифрования включает короткие имена для алгоритмов, поставляемых в комплекте .NET Framework.

Если используется произвольный хэш-алгоритм, разработчик может вызвать метод System.Security.Cryptography.HashAlgorithm.Create, возвращающий объект, реализующий преобразование хэширования.

Сопоставление имен алгоритмов в файлах конфигурации

По умолчанию среда выполнения возвращает объект System.Security.Cryptography.SHA1CryptoServiceProvider class во всех четырех сценариях. Однако в последних двух сценариях администратор компьютера может изменить тип возвращаемого этими методами объекта. Для этого необходимо сопоставить понятное имя алгоритма с классом, используемым в файле конфигурации компьютера (Machine.config).

В следующем примере показана настройка среды выполнения таким образом, чтобы методы System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName("SHA1") и System.Security.Cryptography.HashAlgorithm.Create возвращали объект MySHA1HashClass.

<configuration>
   <!-- Other configuration settings. -->
   <mscorlib>
      <cryptographySettings>
         <cryptoNameMapping>
            <cryptoClasses>
               <cryptoClass MySHA1Hash="MySHA1HashClass, MyAssembly
                  Culture='en', PublicKeyToken=a5d015c7d5a0b012,
                  Version=1.0.0.0"/>
            </cryptoClasses>
            <nameEntry name="SHA1" class="MySHA1Hash"/>
            <nameEntry name="System.Security.Cryptography.SHA1"
                       class="MySHA1Hash"/>
            <nameEntry name="System.Security.Cryptography.HashAlgorithm"
                       class="MySHA1Hash"/>
         </cryptoNameMapping>
      </cryptographySettings>
   </mscorlib>
</configuration>

Имя атрибута можно задать в элементе <cryptoClass> (в предыдущем примере атрибут имел имя MySHA1Hash). Значением атрибута в элементе <cryptoClass> является строка, используемая средой CLR для поиска класса. Можно использовать любую строку, отвечающую требованиям, описанным в разделе Указание полных имен типов.

С одним классом может быть сопоставлено много имен алгоритмов. Элемент <nameEntry> сопоставляет класс с одним понятным именем алгоритма. Атрибут name может быть либо строкой, используемой при вызове метода System.Security.Cryptography.CryptoConfig.CreateFromName, либо именем абстрактного криптографического класса в пространстве имен System.Security.Cryptography. Значением атрибута class является имя атрибута в элементе <cryptoClass>.

693aff9y.alert_note(ru-ru,VS.90).gifПримечание.

Алгоритм SHA1 можно получить с помощью метода System.Security.Cryptography.SHA1.Create или метода Security.CryptoConfig.CreateFromName("SHA1"). Каждый метод возвращает только объект, реализующий алгоритм SHA1. Нет необходимости сопоставлять каждое понятное имя алгоритма с одним и тем же классом в файле конфигурации.

Список имен по умолчанию, а также сопоставляемых с ними классов см. в классе CryptoConfig.

См. также

Другие ресурсы

Службы криптографии

Настройка криптографических классов