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

.NET提供的加密算法概述

编程学习2012-10-2741240

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

相关文章

 C++中指针的使用艺术

C++中指针的使用艺术

C++中指针的使用艺术 在C++编程中使用指针能有速度快,节约内存等优点,是很多C++程序员的最爱。但指针是一把双刃剑,用好了它,你就会发现指针有多么的方便,反之,你可能就头疼了,往往会出现意想不到的问题。   一.什么是指针:   其实指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而指针只是一个指示器,它告诉程序在内存的哪块区域可以找到数据。   这是一个非常重要的概念,有很多程序和算法都是围绕指针设计的,如链...

密码的故事

密码的故事

密码的故事Billy Hollis 本文是由一个问题引出的。我需要一种将密码保存在加密文件中的方法,因为我需要记住许多密码,但记忆力却已大不如前。我知道有许多商用工具能够做到这一点,但我感到学习  .NET 中的一项新技术真的很有好处。 我用 Visual Basic® .NET  完成了一个简单而完整的程序,用于加密和解密文件,从中学到了许多知识。既然加密对于多种开发都是一个重要问题,本文就介绍一下如何构造这样的程序。 有各种低级别的技术可以用于加密,...

VB.NET中如何扩充字符串进行固定宽度显示

VB.NET中如何扩充字符串进行固定宽度显示

  在VB.NET中,当你需要在控制台显示数据或准备好打印数据时,可能需要调整列宽以显示固定长度的数据。本文介绍了使用String对象的PadLeft方法和PadRight方法扩充字符串以进行固定宽度显示。PadLeft和PadRight方法      PadLeft和PadRight是字符串类的两个方法,可以分别使用它们在字符串的左边和右边填充空格。这两个方法多接受一个代表总长度的整型数,添加的空格数等于填充总长度减去字符串的当前长...

MD5加密VB版

MD5加密VB版

'MD5加密VB版 '调用方法:str=MD5("Apull",32),就能得到"Apull"的32位的MD5。 Private m_lOnBits(30) Private m_l2Power(30) Private Const BITS_TO_A_BYTE = 8 Private Const BYTES_TO_A_WORD = 4 Private Const BITS_TO_A_WORD = 32 Private Fu...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。