当前位置:首页 > 编程学习 > .NET提供的加密算法概述

.NET提供的加密算法概述

编程学习2012-10-2753550

  加密数据可以使用对称加密或非对称加密算法,使用对称加密比非对称密钥快得多,但对称密钥需要解决安全交换密钥的问题。在.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万次:

 

.NET提供的加密算法概述  编程 .NET 第1张

 

  可以看出。Cng算法的速度是最差的,而Csp居中水平,Managed实现则速度非常快,另外,如果加大SHA算法的位数的话,当到384位时差别就不再明显,而且Csp算法所需时间成为了最少的方式,这个我认为是操作系统API调用所形成的优势:  

 

.NET提供的加密算法概述  编程 .NET 第2张

 

原文链接:http://www.cnblogs.com/lekko/archive/2012/09/11/2680288.html

 

扫描二维码推送至手机访问。

版权声明:本文由海阔天空发布,如需转载请注明出处。

本文链接:https://apull.net/html/20121027421.html

标签: 编程.NET
分享给朋友:

相关文章

ASP六大对象介绍

ASP六大对象介绍

Application对象 Application对象是个应用程序级的对象,用来在所有用户间共享信息,并可以在Web应用程序运行期间持久地保持数据。 Application的属性:  方法如下: Application对象没有内置的属性,但是我们可以自行创建其属性。 <% Application("属性名")=值 %>    其实大部分Application变量都 存放在Contents集合中,当你创建一个新的Application变量时,其实...

用vb模拟键盘

用vb模拟键盘

  键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制。   当用户按下键盘上的一个键时,键盘内的芯片会...

[转].NET实现中英文验证码

[转].NET实现中英文验证码

最终效果如图:  CheckCode.aspx.cs代码如下protected void Page_Load(object sender, EventArgs e) { //获取GB2312编码页(表) /**//** * 生成中文验证验码所要使用的方法 * 注,生成中文验证码时要改变一下生成验证码图片的宽度 * var imageCode = new System.Drawing.Bitmap((int)Math....

6个变态的C语言Hello World程序

6个变态的C语言Hello World程序

下面的六个程序片段主要完成这些事情:输出Hello, World混乱C语言的源代码下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。hello1.c    #define _________ } #define ________ putchar #define _______ main #define _(a) ________(a); #define ______ _______(){ #define...