基于.NET类库实现RSA、DES加密应用

时间:2022-09-29 09:59:40

基于.NET类库实现RSA、DES加密应用

【 摘 要 】 以微软基类库为基础,设计和实现了一种基于的RSA、DES加密应用。信息安全愈来愈在经济社会中占有和发挥重要影响,信息管理专业中加密解密教学要贴近实际。这要求教学过程中须特别注意实践动手能力培养,单纯讲解理论是不够的。首先分析了RSA、DES的基本特征和可借用平台,然后基于.NET讨论了实现的主要步骤和关键技术,给出了核心部分代码。经验表明,只要引导科学,学生能够在高级平台上,借助已有类库撑握和实现对称加密和RSA算法基本应用。本文可供相关专业学习者在进行加密学习时参考。

【 关键词 】 微软基类库;RSA;DES;教学

【 中图分类号 】 TP393 【 文献标识码 】 A

1 引言

加密解密是主动信息安全中的重要内容。加密解密部分不但需要对基本原理了解,更要能熟练撑握应用现有编程平台进行加密解密程序的设计实现。但公开文献中对加密算法优化改进的多,对具体操作实现进行讨论的少,相关具有较高参考价值且操作性强的分析和研究更不多见。本文将选择其中最为基础和最重要的DES和RSA算法,探讨实现方法与步骤。

由Riverst、Shami、Allandeman(RSA)所设计的基于大数分解困难的非对称加密算法RSA,是当今仍有较高可靠性且仍在广泛使用的加密算法,也是非对称算法中的重要代表。在非对称加密算法中RSA是基础性知识,能应用RSA进行机密消息加密就能够进一步推广到其他算法如DSA。对称算法中,虽然DES(Data Encryption Standard)存在密钥空间小、明文分段小,容易出现密文重复导致猜解等种种不足,似乎针以DES攻击偿试从来就断过,但其他如3DES算法核心思想是一致的。故当前对称算法中原理仍然以DES为主。

掌握DES、RSA后,就能够举一反三学习其他对称、非对称加密方法,因此建立DES、RSA算法及其应用是必要的。本文首先分析了微软.NET框架对加密解密部分的设计思路,介绍了实现DES和RSA的类库原型,然后基于类库设计并实现了一个分别应用RSA和DES算法的加密解密程序。

2 加密算法和微软加密基类库

在Java和C#两大主流开发方向上,尽管C#因为必须用到微软基类库且属商业化非开源软件,而受到诸多限制。但鉴于国内Windows居于绝对统治地位,还是有相当部分国内软件开发是基于Windows平台,微软加密服务的研究和用应都不少。加密技术随着互联网和商业系统安全问题的日益突出和国内对系统安全重要性的认识,已经逐步在各种实际应用中开展。在部分非计算机专业中学习加密解密,选C#在NET框架下开发是可行的,也几乎是唯一选项。私钥加密算法使用单密钥来加密和解密数据。私钥加密算法的速度快(与公钥算法相比),主要适用于对较大的数据流进行加密转换,在可加密数据容量方面基本没有局限。

同一密钥既能加密也同时能解密,密钥本身的安全性及信任机制就非常重要。微软在.NET加密命名空间中提供的私钥加密算法主要有:AesManaged、DES、RC2、RijndaelManaged、TripleDES。其中DES是教材中讲授内容,AESmanaged、3DES与DES原理使用方法基本相同,掌握其中一种即能触类旁通。

公钥加密算法使用一个保密的私钥和一个公开的公钥进行加密解密数据,因其密钥不同又称用非对称密钥算法。公钥和私钥相互对应,用公钥加密的数据只能用私钥解密,而用私钥加密(签名)的数据只能用公钥解密(验证),二者能互换。加密命名空间提供的公钥算法主要有:DSA、RSA、ECDiffieHellman,其中最有代表性的即RSA。RSA 允许同时进行加密和签名,但 DSA 只能用于签名,Diffie-Hellman 只能用于生成密钥。通常情况下,公钥算法比私钥算法具有更多的使用限制。

3 基本实现方法

3.1 DES实现关键技术

DES是IBM在20世纪70年应美国家标准局征集设计出的56位短密钥分块对称加密方法,效率高,实现容易。1976年被国家标准局采纳,作为非机密领域数据加密。尽管现在看来DES密钥空间太小,易遭受暴力攻击,但DES开创了依附密钥保密而不是算法保密的时代,DES是第一种进入社会生活的对称加密算法。通常在学习对称加密时都会以DES为对象详细分析和学习其算法。

有关DES算法的流程众多文献中都有,这里不再复述。下面以微软加密命名空间为基础,讨论其实现过程。首先定义加密明文和密文的文件流,定义分块加密时所用的暂存缓冲区。

FileStream FSin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream FSout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

FSout.SetLength(0); byte[] buff = new byte[100];

long FileInLen = FSin.Length; //明文总长.

int m; long enLen = 0; //已完成加密的明文长度。

然后实例化DES加密类DES Crypto Service Provider,再将实参:加密输现数据流,初始化参数等传入加密对象。依次将明文分块读入已设计好的加密实例中,并将密文同步输出到密文流,就能够最终得到密文。

DES des = new DESCryptoServiceProvider();

CryptoStream encStream = new CryptoStream(FSout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);

while (enLen < FileInLen )

{ m = FSin.Read(buff, 0, 100);

encStream.Write(buff, 0, len);enLen+=m;

}

DES的防猜测改进:关于desIV。前述DES加密中原型中,desKey为加密密钥的二进制, 但desIV在教材和DES算法中并未提及。这由DES算法本身的脆弱性及应用特点决定。

DES算法因简单高效,主要用于大块数据加密,加密过程明文被分割成均等大小的块,每一块单独应用DES算法。这样,如果明文中存在重复块,则输出的密文流中也必然存在重复块。如果明文是纯文本,则由概率猜解推知原文的风险就非常之大,非法用户获知纯文本块结构的任何信息,就可以利用该信息来解密已知的密码文本块,并有可能进一步获知密钥。为了防范此风险,实际应用的DES算法中将前一个块中的信息混合到下一个块的加密过程中,这样两个相同的纯文本块的输出就变得不同。因此,在第一块加密时,需指定初始向量,后续块的“向量”由前一块信息自动生成。这个初始向量,就是desIV。

3.2 RSA实现关键技术

RSA是基于大素数乘积分解难题而设计的加密方法,出于安全性需要素数选择不能太小,导致密钥较长,故RSA加密效率低,主要用于密钥传递等少量数据加密场合。通常,密文用DES加密,DES密钥用RSA加密。以下为应用RSA进行字符串加密的源代码,请注意RSA公钥和私钥的存贮方法。

UnicodeEncoding ByteConverter = new UnicodeEncoding();

byte[] dataToEncrypt = yteConverter.GetBytes(this.textBox_Ptext_RSA.Text .Trim ());

byte[] encryptedData,decryptedData;

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);

this.textBox_Ctext_RSA.Text=BitConverter.ToString (encryptedData );

this.publickeyRSA = RSA.ExportParameters(false);

this.privatekeyRSA = RSA.ExportParameters(true);

StreamWriter mwriter = new StreamWriter("publickeyRSA.xml");

mwriter.Write(RSA .ToXmlString (false ));mwriter.Close();

mwriter = new StreamWriter("privatekeyRSA.xml");

mwriter.Write(RSA.ToXmlString(true ));mwriter.Close();

MessageBox.Show("已完成加密,PK和SK文件在当前目录下");

使用中,调用RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false)即将二进制明文dataToEncrypt读入RSA加密生成密文存入缓冲区decryptedData。

RSA加密中公钥私钥通过RSAParameters结构存贮

RSAParameters publickeyRSA, privatekeyRSA;//构造RSAParameters结构

publickeyRSA = RSA.ExportParameters(false);//false仅输出公钥;true则将公私钥一起输出。

此公私钥可直接作为参数传递给解密函数。

如果要序列化成文本存贮,则须通过RSA .ToXmlString (false )方法:

StreamWriter mwriter= new Stream Writer ("publickeyRSA.xml")

mwriter.Write(RSA .ToXmlString (false ));

mwriter.Close();

由经此,可在程序根目录下,生成只包括公钥的publickey。

4 程序原型与应用

图1为制作完成的“狮子山加密工具包”功能界面。实现了DES算法对字符串、文件的加密解密;RSA算法对字符串的加密解密;也提供MD5、SHA1文件摘要功能。程序请见投稿附件 “狮子山加密.rar”。

在实际教学过程中,通过课堂讲解和教师的实际动手示范,所在专业(信息管理与信息系统)学生中已经有少数能够制作类似简单的加解密程序。大多数学生也通过此案例讲解,加深了对教材知识点的理解,更重要是是增强了大多数同学制用和应用DES、RSA程序的信心,这对于提高专业学生的动手能力,培养学生专业兴趣是很有裨益的。

5 结束语

本文以微软.NET框架类库为基础,讨论并展示和实现了DES、RSA的具体方法。在信息安全教学过程中,以此操作练习为基础,能避免单纯的理论讲解,使信息管理专业学生能够在教师示范下,利用高级编程平台已有类库将对称加密和RSA算法进行基本应用,从而提高非计算机专业学生加密解密知识点的学习效果。

参考文献

[1] 秦艳琳,吴晓平.基于.NET的TripleDES算法在网络传输中的实现[J].计算机应用与软件,2010,27(11):53-55.

[2] 张基温.信息安全与保密教程[M].北京:清华大学出版,2008.

[3] 陈开颜,张鹏,邓高明等.物理可观测下DES的安全性研究[J].电子学报,2009,37(11):2389-2395.

[4] 赵为强,谢吉华 使用Microsoft Crypto API开发基于USB电子钥匙的CSP[J].2003,(11):33-34

[5] 熊小兵,高俊玲.微软信息密码系统及其应用[J].计算机与信息技术,2006,(7):73-76.

[6] 李显峰,王渊,魏聪明.基于Microsoft .NET框架加密技术的SQL Server安全登录机制研[J].电脑知识与技术,2009,15(22):6151-6152.

[7] 卢开澄.计算机密码学[M].北京:清华出版社,2003.

作者简介:

章德宾(1975-),男,山东诸城人,博士,副教授;主要研究方向和关注领域:系统模拟、信息管理。

上一篇:Microsoft SQL Server数据库风险分析与建议 下一篇:高职高专英语教学中应用专门用途英语的可行性...