将算法名称映射到加密类
注意
本文特定于 .NET Framework。 它不适用于 .NET 的较新版本实现,包括 .NET 6 及更高版本。
开发人员可通过四种方式使用 Windows SDK 创建加密对象:
通过使用 new 运算符来创建对象。
通过调用该算法的抽象类上的 Create 方法,创建实现特定加密算法的对象。
通过调用 CryptoConfig.CreateFromName 方法创建实现特定加密算法的对象。
创建实现加密算法类的对象(例如对称块密码),方法是在该类型的算法(如 SymmetricAlgorithm)的抽象类上调用 Create 方法。
例如,假设开发人员想要计算一组字节的 SHA1 哈希。 System.Security.Cryptography 命名空间包含 SHA1 算法的两个实现,一个纯托管实现和一个包装 CryptoAPI 的实现。 开发人员可以选择通过调用 new 运算符来实例化特定 SHA1 实现(如 SHA1Managed)。 但是,如果只要类实现 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> 元素中的特性的值是公共语言运行时用来查找类的字符串。 可以使用满足指定完全限定类型名称中指定的要求的任何字符串。
多个算法名称可以映射到同一个类。 <nameEntry> 元素将类映射到一个友好算法名称。 name 属性可以是调用 System.Security.Cryptography.CryptoConfig.CreateFromName 方法时所使用的字符串,也可以是 System.Security.Cryptography 命名空间中的抽象加密类的名称。 class 特性的值是 <cryptoClass> 元素中的特性的名称。
注意
可以通过调用 SHA1.Create 或 Security.CryptoConfig.CreateFromName("SHA1") 方法来获取 SHA1 算法。 每个方法仅保证它返回实现 SHA1 算法的对象。 无需将算法的每个友好名称映射到配置文件中的同一个类。
有关默认名称及其映射到的类的列表,请参阅 CryptoConfig。