基于.net框架开发功能强大的应用程序的同时也要充分考虑应用程序的安全性,而实现这些安全性常常需要用到各种加密算法。加密通过防止数据被查看或修改,并在原本不安全的信道上提供安全的通信信道。例如,可以使用加密算法对数据进行加密,在加密状态下传输数据,然后由预定的接收方对数据进行解密。如果第三方截获了加密的数据,将难以解密该数据。
-
保密性:防止用户的标识或数据被读取。
-
数据完整性:防止数据被更改。
-
身份验证:确保数据发自特定的一方
一.私钥加密(对称加密):对数据执行转换,使第三方无法读取该数据。此类型的加密使用单个共享的机密密钥来加密和解密数据。
特点:使用单个私钥来加密和解密数据;具有密钥的任意一方都可以使用该密钥解密数据;私钥加密算法非常快(与公钥算法相比),特别适用于对较大的数据流执行加密转换。
缺点:私钥加密的缺点是它假定双方已就密钥和 IV 达成协议,并且互相传达了密钥和 初始化向量 IV 的值。并且,密钥必须对未经授权的用户保密。由于存在这些问题,私钥加密通常与公钥加密一起使用,来秘密地传达密钥和 IV 的值。
用途:通常用于加密对方所需的实际数据。
.NET Framework 下实现私钥加密算法的类:
1) DESCryptoServiceProvider
2) RC2CryptoServiceProvider
3) RijndaelManaged
4) TripleDESCryptoServiceProvider
二.公钥加密(不对称加密):对数据执行转换,使第三方无法读取该数据。此类加密使用公钥/私钥对来加密和解密数据。
特点:公钥加密具有更大的密钥空间,不容易受到对每个可能密钥都进行穷举攻击的影响;对所有人公开,易于分发;
缺点:公钥算法非常缓慢(与私钥算法相比),不适合用来加密大量数据。
用途:通常用于加密一个私钥算法将要使用的密钥和 初始向量IV。
.NET Framework下实现公钥加密算法的类:
1)DSACryptoServiceProvider
2)RSACryptoServiceProvider
三. 加密签名:通过创建对特定的一方唯一的数字签名来确保数据发自该特定方。此过程还使用哈希函数。
使用公钥加密同样可以对消息进行数字签名。甲方使用哈希算法创建消息的摘要。该消息摘要是数据的唯一表示形式。然后,甲方使用自己的私钥莱加密消息摘要用于创建自己的个人签名。在收到该消息和签名时,乙方使用甲方的公钥解密签名从而恢复该消息摘要,接着使用与甲方所使用的相同的哈希算法来散列该消息。如果乙方计算的消息摘要与从甲方那里收到的消息摘要完全一致,乙方就可以确定该消息来自私钥的持有人,并且数据未被修改过。如果乙方相信甲方是私钥的持有人,则他知道该消息来自甲方。
缺点:发送方的公钥向所有人公开,并且通常包含在数字签名格式中,因此所有的人都可以验证签名,缺乏对消息的机密性的保护。
用途:数字签名验证发送方的标识(确定消息是否由对方发出)并保护数据的完整性。
.NET Framework 下实现数字签名算法的类:
DSACryptoServiceProvider
RSACryptoServiceProvider
四.加密哈希:将数据从任意长度映射为定长字节序列。哈希在统计上是唯一的;不同的双字节序列不会哈希为同一个值。
.NET Framework 下实现数字签名算法的类:
HMACSHA1
MACTripleDES
MD5CryptoServiceProvider
SHA1Managed
SHA256Managed
SHA384Managed
SHA512Managed
特点:要找到散列为同一个值的两个不同的输入,在计算上是不可能的。
用途:消息身份验证代码 (MAC) 哈希函数通常与数字签名一起用于对数据进行签名,以确保数据的完整性。