.NET 与安全性(1)——— 数据加密算法

目前企业面临的计算环境和过去有很大的变化,许多数据资源能够依靠网络来远程存取,而且越来越多的通讯依赖于公共网络公共网络(如 Internet),而这些环境并不保证实体间的安全通信,数据在传输过程可能被其它人读取或篡改。

加密将防止数据被查看或修改,并在原本不安全的信道上提供安全的通信信道,它达到以下目的:

  • 保密性:防止用户的标识或数据被读取。
  • 数据完整性:防止数据被更改。
  • 身份验证:确保数据发自特定的一方。

一、数据加密/编码算法列表

常见用于保证安全的加密或编码算法如下:

1、常用密钥算法

密钥算法用来对敏感数据、摘要、签名等信息进行加密,常用的密钥算法包括:

  • DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
  • 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;
  • RC2和 RC4:用变长密钥对大量数据进行加密,比 DES 快;
  • IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;
  • RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件快的长度也是可变的;
  • DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
  • AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法;
  • BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;
  • 其它算法,如ElGamal、Deffie-Hellman、新型椭圆曲线算法ECC等。

 2、单向散列算法

单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:

  • MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值;
  • SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值;
  • MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。
  • CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段(CRC 并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。

 3、其它数据算法

其它数据算法包括一些常用编码算法及其与明文(ASCII、Unicode 等)转换等,如 Base 64Quoted PrintableEBCDIC 等。

二、算法的 .NET 实现

常见的加密和编码算法都已经在 .NET Framework中得到了实现,为编码人员提供了极大的便利性,实现这些算法的名称空间是:System.Security.Cryptography。

System.Security.Cryptography 命名空间提供加密服务,包括安全的数据编码和解码,以及许多其他操作,例如散列法、随机数字生成和消息身份验证。

System.Security.Cryptography 是按如下方式组织的:

1、私钥加密

私钥加密又称为对称加密,因为同一密钥既用于加密又用于解密。私钥加密算法非常快(与公钥算法相比),特别适用于对较大的数据流执行加密转换。

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

  • DES:DESCryptoServiceProvider
  • RC2:RC2CryptoServiceProvider
  • Rijndael(AES):RijndaelManaged
  • 3DES:TripleDESCryptoServiceProvider

2、公钥加密和数字签名

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

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

  • DSA:DSACryptoServiceProvider
  • RSA:RSACryptoServiceProvider 

3、哈希(Hash)值

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

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

  • HMAC:HMACSHA1 (HMAC 为一种使用密钥的 Hash 算法)
  • MAC:MACTripleDES
  • MD5:MD5CryptoServiceProvider
  • SHA1:SHA1Managed、SHA256Managed、SHA384Managed、SHA512Managed

4、随机数生成

加密密钥需要尽可能地随机,以便使生成的密钥很难再现,所以随机数生成是许多加密操作不可分割的组成部分。

在 .NET Framework 中,RNGCryptoServiceProvider 是随机数生成器算法的实现,对于数据算法,.NET Framework 则在其它命名空间中实现,如 Convert 类实现 Base 64 编码,System.Text 来实现编码方式的转换等。

从以上来看,.NET Framework 对于数据加密/编码还是支持比较好,大大地方便了开发人员,但美中不足的是,.NET Framework 中的数据加密算法仍然不够完全,如 IDEA、BLOWFISH、其它算法,如ElGamal、Deffie-Hellman、ECC 等,对于一些其它的数据校验算法支持也不够,如 CRC、SFV 等,开发人员只能去从早期代码做移植或者寻找第三方厂商的实现。

BTW:看着这么多数据加密算法,是不是有点头晕?看看 这个图片 后,你一定感觉到一些压力的 🙂

“.NET 与安全性(1)——— 数据加密算法”的40个回复

  1. 关于.NET的安全框架,我感觉其开放性很好,比较灵活,且易于扩展。相比之完全性,这应该是更为重要的一个因素。

    另关于这方面的话题,我个人向大家推荐一本O’Reilly的好书:Programming .NET Security。书中例子很多,图文并茂,通俗易懂,但阐释问题又不仅停留于入门水平,看后颇有收获。

    BTW: 后生(还是个女生)可畏啊!:)

  2. 我目前了解的关于编程安全性的书:

    1、O’REILLY – Web.Security.&.Commerce ,1997 年出版
    2、Oreilly.Programming.Dot.NET.Security ,2003 年 6 月出版
    3、Microsoft Press Writing Secure Code,有中文版
    4、Applied Cryptography(应用密码学,就是小MM看的那本书),有中文版

  3. Oh,My god。这张照片亏了没让威尔·史密斯看见。不然这个小MM肯定小命不保^_^

  4. 我们最近在研究一种加密的密码长度可变,即加密强度可根据需要改变的矩阵加密算法,该算法具有较高的速度和10 的几十到几千次方的加密强度。

  5. 小弟现在正在做数据加密(aes)的毕业设计,由于水平实在是有限的很,对此一筹莫展,希望各位有识之士能帮帮忙,谁知道aes的原代码
    知道的话联系:[email protected]
    谢谢了

  6. 本人有几项在密码识别认证方面的专利,其安全性和方便性获得国家信息重点试验室研究人员肯定,将会拥有无尽的开发市场。有嵌入式软件设计和对现有操作系统中运行的静态密码识别加入附加代码的,请如我联系,巨大的财富等着你。
    [email protected]

  7. 中日友好根本就不存在!过去没有,现在没有,将来也不会有!
    清醒过来吧,不要再自己骗自己!
    2.现在中日两国贸易总额每年达600亿美元。会不会因为我们全球华人对抵
    制日货,中国就会受到损失?
    这是不会的!原因是:
    a.日本出口到中国的是高级奢侈品??我们中华大众可以拒绝;
    b.中国出口到日本的是普通生活必须品??日本人很难抵制,他们其实是在
    享受着我们廉价的产品!
    3.另外,从中国的长远利益来看,减少对日本产品的过份依赖,对中国的国
    家安全是非常重要的,比如日本参加美国的NMD,其目的就是与中国为敌!
    ***敬请各位把这篇文章贴到你所知道的任何地方。死难的4000万同胞将感谢你
    我们不能忘记这个仇敌-日本!
    每一个人都要为中华民族屈辱的历史沉默
    每一个人都要为如草芥一样被日本人刺杀的中国人沉默
    生者,要用整个生命与日本人对抗
    死者,魂灵要到日本悠荡,惊恐每一个日本人

  8. 怎么这么多的人想知道DES源代码呀!小弟我有源代码,只是它太长了,小弟我加了几个班才完成了500行了,小弟我也想寻求战略合作伙伴,其实是相互学习的朋友,因为我才学习数据加密,而且,其中还有很多都不懂!我想请教请教哪位对数据加密有兴趣的朋友,一起探讨!哪位有兴趣的朋友记得要联系呀![email protected]

  9. 谁有c语言的,SHA1和DSA算法的源码,给小弟传一份,有急用,先谢谢各位了!!!!!!!!!
    有的话帮帮我,[email protected],我这里有Blowfish算法的源码,谁要可以给我联系

  10. IDEA(International Data Encryption Algorithm)国际数据加密算法详细过程是什么?

  11. 攻读硕士学位期间参加的科研项目和发表的论文
    攻读硕士期间参加的科研项目

  12. 我正在写椭圆曲线加密算法与数字签名算法的毕业论文,不知哪位老兄有椭圆曲线的原代码,麻烦给我传一份来研究一下。谢谢了。
    我的Email:[email protected]
    QQ:490468995

评论已关闭。