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