.NET Framework 加密模型
更新:2010 年 7 月
.NET Framework 提供许多标准加密算法的实现。 这些算法易于使用并具有最安全的可能默认属性。 此外,对象继承、流设计和配置的 .NET Framework 加密模型具有高度可扩展性。
对象继承
.NET Framework 安全系统实现可扩展模式的派生类继承。 层次结构如下所示:
算法类型类,例如 SymmetricAlgorithm、AsymmetricAlgorithm 或 HashAlgorithm。 该级别为抽象。
从算法类型类继承的算法类,例如 Aes、RC2 或 ECDiffieHellman。 该级别为抽象。
从算法类继承的算法类的实现,例如 AesManaged、RC2CryptoServiceProvider 或 ECDiffieHellmanCng。 该级别是完全实现的。
使用这种模式的派生类,很容易添加新算法或现有算法的新实现。 例如,若要创建新的公钥算法,则应从 AsymmetricAlgorithm 类继承。 若要创建特定算法的新实现,应创建该算法的非抽象派生类。
如何在 .NET Framework 中实现其他算法
作为可用于算法的不同实现的示例,可考虑对称算法。 所有对称算法的基础是由以下算法继承的 SymmetricAlgorithm:
Aes 由以下两个类继承:AesCryptoServiceProvider 和 AesManaged。 AesCryptoServiceProvider 类是 Aes 的 Windows 加密 API (CAPI) 实现的包装,而 AesManaged 类将完全写入托管代码中。 除托管实现和 CAPI 实现外,还有第三种类型的实现“下一代加密技术”(CNG)。 CNG 算法的示例是 ECDiffieHellmanCng。 Windows Vista 及更高版本中提供了 CNG 算法。
也可以选择最适合您的实现。 托管实现适用于支持 .NET Framework 的所有平台。 CAPI 实现适用于早期操作系统,不再对其进行开发。 CNG 是将进行新开发的最新实现。 但是,托管实现没有经过美国联邦信息处理标准 (FIPS) 认证,实现速度可能比包装类慢。
流设计
公共语言运行时使用面向流的设计实现对称算法和哈希算法。 此设计的核心是 CryptoStream 类,它派生自 Stream 类。 基于流的加密对象支持用于处理对象的数据传输部分的单个标准接口 (CryptoStream)。 由于所有对象都在标准接口上生成,所以可以将多个对象(如一个哈希对象后跟一个加密对象)链接在一起,并且可以对数据执行多个操作而不需要为数据提供任何中间存储。 使用流模型时还可以用更小的对象生成对象。 例如,可以将加密算法和哈希算法的组合视为单个流对象(即使该对象可能是从一组流对象生成的)。
加密配置
使用加密配置可以将算法的特定实现解析为算法名称,从而使 .NET Framework 加密类具有可扩展性。 您可以添加自己的硬件或软件算法实现,并将该实现映射到您选择的算法名称上。 如果未在配置文件中指定算法,则使用默认设置。 有关加密配置的更多信息,请参见配置加密类。
选择算法
可以因各种原因选择算法,比如为保持数据完整性、数据私密性或者为了生成密钥。 对称算法和哈希算法旨在确保数据的完整性(防止更改)或私密性(防止查看)。 哈希算法主要用于实现数据完整性。
此处是一个建议应用程序使用的算法列表:
数据私密性:
数据完整性:
数字签名:
密钥交换:
随机数生成:
从密码生成密钥:
请参见
概念
其他资源
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2010 年 7 月 |
新增了主题。 |
信息补充。 |