Отображение имен алгоритмов на криптографические классы
Примечание.
Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
Существует четыре способа, которым разработчик может создать объект шифрования с помощью пакета 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.