Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Эта статья связана с .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.