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

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

  • Создайте объект с помощью нового оператора.

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

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

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

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

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

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

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

По умолчанию среда выполнения возвращает SHA1CryptoServiceProvider объект для всех четырех сценариев. Однако администратор компьютера может изменить тип объекта, возвращаемого методами в последних двух сценариях. Для этого необходимо сопоставить понятное имя алгоритма с классом, который вы хотите использовать в файле конфигурации компьютера (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> сопоставляет класс с одним понятным именем алгоритма. Атрибут имени может быть строкой, которая используется при вызове метода System.Security.Cryptography.CryptoConfig.CreateFromName или имени абстрактного класса шифрования в System.Security.Cryptography пространстве имен. Значение атрибута класса — это имя атрибута в элементе <cryptoClass>.

Примечание.

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

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

См. также