.NET提供的加密算法概述
加密数据可以使用对称加密或非对称加密算法,使用对称加密比非对称密钥快得多,但对称密钥需要解决安全交换密钥的问题。在.NET Framework中,可以使用System.Security.Cryptography命名空间中的类来加密。它实现了几个对称和非对称算法。从.NET 3.4开始,一些新类以Cng作为前缀或后缀,表示Cryptography Next Generation,用于采用Windows NT 6.0或更高内核版本的操作系统(Vista、Win7、Win2008、Win8)。这个API可以使用基于提供程序的模型,编写独立于算法的程序。
下面列出System.Security.Cryptography命名空间中的加密类及其功能。没有Cng、Managed或 CryptoServiceProvider后缀的类是抽象基类,例如MD5。Managed后缀表示这个算法用托管代码实现,其他类可能封装了内部的 Windows API调用。CryptoServiceProvider后缀用于实现了抽象基类的类,Cng后缀用于利用新Cryptography CNG API的类,它只能用于指定版本的操作系统。
类别 | 类 | 说明 |
散 列 | MD5, MD5Cng SHA1, SHA1Managed, SHA1Cng SHA256, SHA256Managed, SHA256Cng SHA384, SHA384Managed, SHA384Cng SHA512, SHA512Managed, SHA512Cng | 散列算法的目标是从任意长度的二进制字符串中创建一个长度固定的散列值。这些算法和数字签名一起用于保证数据的完整性。如果再次散列相同的二进制字符串,会返回相同的散列结果。MD5(Message Digest Algorithm 5)是由RSA实验室开发的,比SHA1快。SHA1在抵御暴力攻击方面比较强大。SHA算法是由美国国家安全局(NSA)设计的。MD5使用128位的散列值,SHA1使用160位。其它SHA算法在其名称中包含了散列长度。SHA512是这些算法中最强大的,其散列长度为512位,也是最慢的 |
对 称 | DES, DESCryptoServiceProvider TripleDES, TripleDESCryptoServiceProvider AES, AESCryptoServiceProvider, AESManaged RC2, RC2CryptoServiceProvider Rijandel, RijandelManaged | 对称密钥算法使用相同的密钥进行数据的加密和解密。现在认为DES(Data Encryption Standard)是不安全的,因为它只使用56位的密钥,可以在不超过24小时的时间内破解。Triple DES是DES的继任者,其密钥长度是168位,但它提供的有效安全性只有112位。AES(Advanced Encrytion Standard)是美国政府采用的加密标准,其密钥长度是128、192或256位。Rijandel非常类似于AES,只是在密钥长度方面的选项较多。 |
非 对 称 | DSA, DSACryptoServiceProvider ECDsa, ECDsaCng ECDiffieHellman, ECDiffieHellmanCng RSA, RSACryptoServiceProvider | 非对称算法使用不同的密钥进行加密和解密。RSA(Rivest, Shamir, Adleman)是第一个用于签名和加密的算法。这个算法广泛用于电子商务协议。DSA(Digital Signature Algorithm)是美国联邦数字签名的政府标准。ECDsa(Elliptic Curve DSA)和ECDiffieHellman使用基于椭圆曲线组的算法。这些算法比较安全,且使用较短的密钥长度。例如,DSA的密钥长度为1024位,其安全性类似于160位的ECDsa。因此,ECDsa比较快。ECDiffieHellman算法用于以安全的方式在公共信道中互换私钥。 |
补充一下吧,关于性能方面,就同一种算法,有CryptoServiceProvider、Managed、Cng三种实现方式,我现在测试了散列中的方法,其中MD5是没有Managed实现的,计算“Test”字符串的散列值10万次:
可以看出。Cng算法的速度是最差的,而Csp居中水平,Managed实现则速度非常快,另外,如果加大SHA算法的位数的话,当到384位时差别就不再明显,而且Csp算法所需时间成为了最少的方式,这个我认为是操作系统API调用所形成的优势: