解密.NET框架中的加密与解密

时间:2022-10-27 06:28:40

【摘要】在.NET的命名空间System.Security.Cryptography中提供了几种算法。可用的非对称算法包括DSA(Digital Signature Algorithm,数字签名算法)和RSA(Rivest-Shamir-Adleman算法,它由...

解密.NET框架中的加密与解密

摘要 加密有多种形式,多种规模,一直以来属于热门话题。在现有的数据加密技术中,并没有权威的解决方案,但可以给出大量的建议。就目前主流的加密与解密算法给出阐述,重点阐述.net框架中的System.Security.Cryptography命名空间中DES算法具体步骤和解释,读者可以通过研读后,试试另外的算法,以求在网站开发实践中举一反三、触类旁通。

关键词 加密解密;算法

中图分类号:TP309.7 文献标识码:B 文章编号:1671-489X(2012)28-0045-02

1 .NET中加密算法的形式及其概况

总的来说,加密有两种形式:1)对称加密,加密和解密时使用的是同一个密钥;2)非对称加密,加密和解密时将使用不同的密钥。通常是用公钥作为加密密钥,任何人都可以用它来加密信息。私钥才是用来解密密钥的,它只能用来对使用其对应的公钥加密的数据进行解密。对称加密相对而言速度更快,但由于加密者和解密者都知道这个唯一的密钥,因此安全性更差一些。非对称加密则通过密钥的方法来解决这个问题,由于私钥永远不会暴露,所以第三方更加难以破解其加密的信息。由于密钥的方法需要更长的处理时间,因此通常的方法是使用非对称密钥加密机制在因特网上实现对对称密钥的加密,这样就使这个用于加密的密钥更安全,不会暴露给第三方。

在.NET的命名空间System.Security.Cryptography中提供了几种算法。可用的非对称算法包括DSA(Digital Signature Algorithm,数字签名算法)和RSA(Rivest-Shamir-Adleman算法,它由3个发明者的名字组成:Ronald Rivest、Adi Shamir和Leonard Adleman)两种。其中DSA只能够用来对数据进行“签名”,因此通常用来做验证,而RSA更加通用。DSA现在是美国政府使用的数字验证的标准。

.NET框架中可以找到的对称加密算法包括DES(Data Encryption Standard,数字加密标准)、Triple DES(3DES)、RC2(Ron’s Code或Rivest’s Cipher,都是源于Ronald Rivest)和Rijndael(源于其发明者John Daemem、Vincent Rijman的名字)。DES成为标准已经有一段时间,尽管它也不断发生变化。3DES和RC2都是DES的变种。3DES是通过对数据进行3次独立的DES加密,扣除奇偶校验位,其总的密钥长度也达到168位。RC2的密钥长度是可以变化的,最大可以达到128(如果要更长的密钥,可以使用RC3、RC4等),因此根据密钥长度不同,可能比DES更脆弱或更强壮。Rijndael是一种完全不同的加密方法,现在已经被接纳为新的AES(高级加密标准)。该标准的目标是替代DES。

2 对加密、解密算法的步骤描述

由于.NET框架中的类是针对数据流进行优化的,因此需要花一些时间来处理数据格式转换。同样需要定义一个密钥以及执行加密或解密操作的初始向量(IV)。需要使用IV应归究于加密的本性:为一串数据位计算加密值时,将会用到前面一串数据位的加密值。由于在加密开始时并不存在这些值,因此用IV来代替。在实践中,IV和密钥都将表示为一个字节的数组,而在DES加密中,其长度是64位(8字节),由于解密算法与加密算法类似,加密需要写入加密数据的目标数据流,而解密需要一个从中读取已加密数据的源数据流。

对一个字符串进行加密所需的步骤:将源字符串转换为一个字节数组;初始化一个加密算法类;使用这个加密算法类来生成一个加密者(encryptor)对象,实现IcryptoTransform接口,它需要密钥和IV值;使用加密者对象来初始化一个密文数据流(CryptoStream对象),该数据流还需要知道要加密哪些数据,以及用来写入加密数据的目标数据流;使用这个密文数据流生成已加密数据,并写到由前面创建的源字节数组创建的目标内存数据流中;获取存储在这个数据流中的字节数据;将这些字节数据转换成一个字符串。

解密所采用的模式与加密类似:将源字符串转换成一个字节数组;根据这个字节数组填充内存数据流的值;初始化一个加密算法类;使用加密算法类生成一个解密者(decryptor)对象,实现ICryptoTransform接口,它需要密钥和IV值;使用解密者对象来初始化一个密文数据流(ICryptoStream)对象,该数据流还需要知道解密什么数据,并需要一个从中读取已加密数据的源数据流;使用密文数据流来读取已经解密数据(可以使用StreamReader.ReadToEnd方法来获取字符串型结果)。

3 根据加密算法写出加密方法

限于篇幅,本文只给出加密方法,读者可以根据加密方法自己写出解密方法。

4 加密与解密在.NET中的测试

5 加密与解密在实践中的应用

现在绝大部分电子商务网站或平台,都需要用户档案系统,需要用户编辑客户详情,包括信用卡详情。信用卡中的信息出于安全因素考虑,必须加密后保存到数据层的数据库中。登录客户编辑自己的信息,就需要从数据库中解密到表示层。

参考文献

[1]郑齐心,房大伟,刘云峰项目开发案例全程实录[M].2版.北京:清华大学出版社,2011.

[2]赵松涛,陈小龙.Visual Studio 2005+SQL Server2005数据库应用系统开发[M].北京:电子工业出版社,2007.

[3]Darie C, Watson K. 2.0电子商务开发实战[M].北京:人民邮电出版社,2007.

上一篇:正确运用多媒体 打造生活化数学课堂 下一篇:中等专业学校计算机课程教学持有观点的讨论