.Net框架目前已经成为Windows环境下的重要开发工具,那么针对.NET框架中的数据加密,我们该采用什么方法呢?我们即可以采用非托管Microsoft _CryptoAPI,也可以采用纯粹的托管实现。虽然这些类的属性很多。但是我们创建一个加密算法类的新实例时,大多数情况下可以采用默认属性。

一、数据加密技术概述 

数据加密主要防止数据被非法查看或修改,并且可以把不安全的信道改造成安全的通讯信道。

例如,可以使用加密算法对数据进行加密,在加密状态下传输数据,然后由预定的接收方对数据进行解密。如果第三方截获了加密的数据,将难以解密该数据。

加密主要解决一下几个问题:

1、保密性:

防止用户的标识或数据被读取。

2、数据完整性:

防止数据被更改。

3、身份验证:

确保数据发自特定的一方。

为了实现上述的要求,我们可以采用以下加密方法。

二、对称加密算法

对称加密算法使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密数据,因此必须保护密钥不被未经授权的人非法得到。对称加密也称为私钥加密。原因是同一密钥既用于加密又用于解密。对称加密算法非常快(与公钥算法相比)并特别适合于对大型数据流执行加密转换。

一般情况下,对称加密法用于一次加密一个数据块。块密码(如RC2、DES、Tricpple DES和Rijndael)通过加密将n字节的输入块转换为加密字节的输出块。如果要加密或解密字节序列,必须逐块进行。由于n的大小很小(对于RC2、DES、Tricpple DES,n=8字节;n=16[默认值];n=24;对于Rijndael,n=32),因此必须对大于n字节的值分成一个个小块,一次加密一个块。

.NET框架的基类库中提供的块密码类使用称作密码块链(CBC)的链模式,它使用一个密钥和一个初始化向量(IV)对数据执行加密转换。对于给定的私钥k,不使用初始化向量的简单块密码将把相同的明文输入块加密为同样的密文输出块。如果在明文流内有重复的块,那么在密文流内也会有重复的块。如果未经授权的用户知道有关明文块的结构的所有信息,就可以使 用该信息解密已知的密文块并有可能获得密钥。为了解决这个问题,我们可将上一个块中的信息混合到加密下一个块的过程中。这样,两个相同的明文块的输出就会不同。由于该技术使用上一个块加密下一个块,因此,使用了一个IV来加密数据的第一个块。使用该系统,未经授权的用户有可能知道的公共消息标头将无法用于对密钥进行反向工程。

破解这样的加密数据,最常用的方法是对每个可能的密钥执行穷举搜索。根据用于执行加密的密钥大小,即使使用最快的计算机执行这种搜索,也极其耗时,因此难以实施。使用较大的密钥大小将使解密更加困难。虽然从理论上说加密不会使对手无法检索加密的数据,但它确实极大增加了这样做的成本。如果执行彻底搜索来检索只在几天内有意义的数据,需要花费几个月的时间,那么穷举搜索的方法是没有意义的。

对称私钥加密的缺点是它假定双方已就密钥和IV取得了一致,并且互相传达了密钥和IV的值。并且,密钥必须对未经授权的用户保密。由于这些问题,对称加密通常与公钥加密一起使用以秘密地传达密钥和IV的值。

.NET框架提供以下实现私钥加密算法的类:

DESCrypto  Service Provider

RC2Crypto Service  Provider

Rijndael Managed

Triple DESCrypto ServiceProvider

分别对应于DES、RC2、Rijndael 和Triple DES加密算法。

三、公钥加密 

公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥都在数学上相关联;用公钥加密的数据只能用私钥解密,而用私钥加密的数据只能用公钥解密。公钥可以被任何人使用;该密钥用于加密要发送到私钥持有者的数据。两个密钥对于通讯会话都是唯一的。公钥加密算法也称为不对称算法,原因是需要用一个密钥加密数据而需要用另一个密钥来解密数据。

公钥加密算法使用固定的缓冲区大小,而私钥加密算法使用可变长度的缓冲区。公钥算法无法像私钥算法那样将数据链接在一起而成为流,原因是只可以加密少量数据。因此,不对称操作不使用与对称操作相同的流模型。

公钥加密具有更大的密钥空间(或密钥的可能值范围),因此不大容易受到对每个可能密钥都进行尝试的穷举攻击的影响。由于不必保护公钥,因此它易于分发。公钥算法可用于创建数字签名以验证数据发送方的标识。但是,公钥算法非常缓慢(与私钥算法相比),而且不是为加密大量数据而设计的。公钥算法仅对传输很少量的数据有用。通常,公钥加密用于加密私钥算法要使用的密钥和IV。传输密钥和IV后,私钥加密将用于该会话的其余部分。

.NET框架提供以下实现公钥加密算法的类:

DSACrypto _Service _Provider

RSACrypto _Service _Provider

分别实现DSA、RSA加密算法。

四、数字签名

公钥算法还可用于构成数字签名。数字签名验证 发送方的标识,并保护数据的完整性。

.NET框架提供以下实现数字签名算法的类:

DSACrypto _Service _Provider

RSACrypto _Service _Provider

五、HASH值 

HASH算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为HASH值。HASH值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的HASH都将产生不同的值。要找到散列为同一个值的两个不同的输人,在计算上是不可能的。

消息身份验证代码(MAC)HASH函数通常与数字 签名一起用于对数据进行签名,而消息检测代码(MDC)HASH函数则用于数据完整性。

.NET框架提供以下实现数字签名算法的类:

HMAC SHA1

MACriple _DES

MD5 _Crypto _Service _Provider

SHA1 Managed

SHA256Managed

SHA384Managed

SHA512Managed

六、随机数生成 

随机数生成是许多加密操作不可分割的组成部分。 例如,加密密钥需要尽可能地随机,以便使它们很难被复制。加密随机数生成器必须生成在计算上无法进行推算(低于P<.05的概率)的输出;即,任何推算下一个输出位的方法不得具有比随机猜测更高的成功几率。.NET框架中的类使用随机数生成器生成加密密钥。

RNGCrypto _Service _Provider是随机数生成器算法的实现。

以上就是.NET框架中支持的加密算法的种类和定义的类,通过以上的加密类我们可以完成大多数数据加密过程,在电子商务中很好的解决数据的安全问题。

小知识之.NET

.NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。