Welcome

首页 / 软件开发 / 数据结构与算法 / 对称加密(3) NET对称加密体系

对称加密(3) NET对称加密体系2014-04-24本节介绍System.Security.Cryptography名称空间中的对称加密类。

1. SymmetricAlgorithm类

SymmetricAlgorithm是抽象类,是所有对称加密算法的基类,该类定义的成员在其子类AES类中做介绍。

当使用派生类时,从安全的角度考虑,仅在使用完对象后强制垃圾回收是不够的。必须对该对象显式调用Clear方法,以便在释放对象之前将对象中所包含的所有敏感数据清零。注意,垃圾回收并不会将回收对象的内容清零,只是将内存标记为可用于重新分配。因而,垃圾回收对象中所包含的数据可能仍存在于未分配内存的内存堆中。在加密对象的情况下,这些数据可能包含敏感信息,如密钥数据或纯文本块。

.NET Framework中所有包含敏感数据的加密类均实现Clea方法。被调用时,Clear方法用0覆盖对象内的所有敏感数据,然后释放对象以便它能被垃圾回收器安全地回收。当对象已被清零并释放后,应该调用Dispose方法并将disposing参数设置为True,以释放与对象关联的所有托管资源和非托管资源。

2. AES类

AES类是一个抽象类,高级加密标准(AES)的所有实现都必须继承此类。该类的成员如下:

1) 构造函数Aes()。AES抽象类只定义了一个无参的构造函数。

2) Aes.Create方法。该静态方法创建用于执行对称算法的加密对象。

3) Aes.Create (String)方法。String类型的参数为要使用的AES的特定实现的名称。

4) CreateDecryptor()方法。该方法继承自SymmetricAlgorithm类,用当前的Key属性和初始化向量(IV)创建对称解密器对象。

注意 对于给定的密钥k,不使用初始化向量的简单块密码将同一个纯文本输入块加密为同一个密码需要文本输出块。如果纯文本流中有重复块,则密码文本流中也会有重复块。如果未经授权的用户知道了纯文本块结构的任何信息,就可以利用该信息来解密已知的密码文本块,并有可能重新获得你的密钥。为了防止这个问题,前一个块中的信息被混合到下一个块的加密过程中。这样,两个相同的纯文本块的输出就变得不一样了。由于此技术使用前一个块加密下一个块,因此需要初始化向量来加密数据的第一个块。

5) CreateDecryptor (Byte[]key, Byte[]iv)方法。在派生类中重写时,用指定的Key属性和初始化向量(IV)创建对称解密器对象。

6) CreateEncryptor()方法。该方法继承自SymmetricAlgorithm类,用当前的Key属性和初始化向量(IV)创建对称加密器对象。

说明 如果当前的Key属性为null,则将调用GenerateKey方法以创建新的随机Key。如果当前的IV属性为null,则将调用GenerateIV方法以创建新的随机 IV。使用具有相同签名的CreateDecryptor重载来解密此方法的结果。

7) CreateEncryptor(byte[]rgbKey,byte[]rgbIV)方法。用指定的Key属性和初始化向量(IV)创建对称加密器对象。

8) GenerateIV()方法。该方法继承自SymmetricAlgorithm类,当在派生类中重写时,生成用于该算法的随机初始化向量 (IV)。

9) GenerateKey()方法。该方法继承自SymmetricAlgorithm类,当在派生类中重写时,生成用于该算法的随机密钥 (Key)。

10) ValidKeySize(int bitLength)方法。该方法继承自SymmetricAlgorithm类,确定指定的密钥大小对当前算法是否有效。如果指定的密钥大小对当前算法有效,则为 true,否则,为false。

11)BlockSize属性。继承自SymmetricAlgorithm类,获取或设置加密操作的块大小(单位:位)。块大小是在一个操作中可加密或解密的基本数据单元。长于块大小的消息将作为连续块处理;对于短于块大小的消息,必须用额外的位进行填充以达到块大小。有效块大小是由所用的对称算法确定的。

12)FeedbackSize属性。继承自SymmetricAlgorithm类,获取或设置加密操作的反馈大小(单位:位)。反馈大小确定反馈到连续加密或解密操作的数据量。反馈大小不能大于块大小。

13)IV属性。继承自SymmetricAlgorithm类,获取或设置对称算法的初始化向量 (IV)。

14)Key属性。继承自SymmetricAlgorithm类,获取或设置对称算法的密钥。密钥既用于加密,也用于解密。为了保证对称算法成功,必须只有发送方和接收方知道密钥。有效密钥大小由对称算法的具体实现指定,并且在LegalKeySizes属性中列出。如果此属性在使用时为 null,则调用GenerateKey 方法以创建新的随机值。

15)KeySize属性。继承自SymmetricAlgorithm类,获取或设置对称算法所用密钥的大小(单位:位)。有效密钥大小由对称算法的具体实现指定,并且在LegalKeySizes属性中列出。

16)KeySizes[] LegalBlockSizes属性。继承自SymmetricAlgorithm类,获取对称算法支持的块大小(单位:位)。对称算法仅支持与该数组中的条目匹配的块大小。

17) KeySizes[] LegalKeySizes属性。继承自SymmetricAlgorithm类,获取对称算法支持的密钥大小(单位:位)。对称算法仅支持与该数组中的条目匹配的密钥大小。

18) CipherMode Mode属性。继承自SymmetricAlgorithm类,默认值为CipherMode.CBC。