微软.NET 的System.Security.Cryptography中的类实现了各种具体的加密算法和技术。这些类,有一些是非托管 Microsoft CryptoAPI 的包装,而另一些则是纯粹的托管实现。在创建一个加密算法类的新实例时,会自动生成密钥以便于使用,并且默认配置属性总是倾向于尽可能强的安全性。.NET系统加密类库有着以下一些基本的技术特性。
对象继承
.NET框架以抽象类的形式定义了提供加密服务的类的基本形态,以这些抽象类为基类,.NET类库以派生继承的方式,实现了一系列具体的加密算法。其层次如下:
最基础的是算法类型类,例如 SymmetricAlgorithm 或 HashAlgorithm。该级别为抽象。
其次是从算法类型类继承的特定类型的算法类,例如 RC2 或 SHA1。该级别为抽象。
最后从特定类型的算法类继承的算法实现,例如 RC2CryptoServiceProvider 或 SHA1Managed。该级别是完全实现的。
基于这一加密算法的类层次,很容易添加新算法或现有算法的新实现。例如,要创建新的公钥算法,则应从 AsymmetricAlgorithm 类继承。若要创建特定算法的新实现,如重新实现SHA1算法,则应继承SHA1类来实现。
面向流的设计
.NET加密类库使用面向流的设计实现了对称算法和哈希算法。其核心是 CryptoStream 类,它派生自 Stream 类。基于流的加密对象全都支持用于处理对象的数据传输部分的单个标准接口 (CryptoStream)。由于所有对象都具备标准接口,所以可以将多个CryptoStream对象(如一个哈希对象后跟一个加密对象)链接在一起,并且可以对数据依次序连续进行加密处理而无需提供任何中间缓冲区。使用流模型时还可以用基本的加密流对象组合成复杂的面向特定应用的加密流对象。例如,可以将加密算法和哈希算法组合成单个流对象。
加密配置
使用加密配置可以将算法名称解析到算法的特定实现,从而使 .NET Framework 加密类具有可扩展性。用户可以基于此添加自己的硬件或软件算法实现,并将该实现映射到相应的算法名称上。如果未在配置文件中指定算法配置,则会使用默认设置。