文件加密系统设计与实现摘要:该文论述了数据加密的原理与方法,介绍了几种常见的加密算法并在此基础之上比较了常用的加密算法的优缺点,在掌握了这几种算法的基础之上,对比对称密钥加密体制和公共密钥密码体制的优缺点以及前面的两个需求,最终利用DES算法和RSA算法来设计和实现自己的加密系统。该文详细的介绍了理论原理并详细记录了系统设计与实现过程。关键词:密码学;DES算法;RSA算法;加密系统设计中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)14-3299-03DesignandImplementationofaEncryptingFileSystemLINPei-tong(GuangdongFoodandDrugVocationalTechnicalSchool,Guangzhou510663,China)Abstract:Aftermasterythesetypesofalgorithms,comparedtheadvantagesanddisadvantagesbetweentheSymmetricalcryptographandnonsymmetricalcryptograph,aswellasconsiderthetwodemandsinfront,atlastdecideuseDESalgorithmandtheRSAalgorithmtodesignandrealizemyencryptionsystem.Inthisarticle,DetailthetheoreticalprinciplesofCryptographicandnotethedetailedofdesignandrealizeprocess..Keywords:cryptography;DES;RSA;design1绪言随着Internet的发展人类已经步入信息时代,在信息时代,信息安全问题越来越重要。我们经常需要一种措施来保护我们的数据,防止被一些怀有不良用心的人所看到或者破坏。因此,在客观上就需要一种强有力的安全措施来保护机密数据不被窃取或篡改。解决这个问题的方式就是数据加密[1]。近年来,保护个人敏感数据成为人们关注的热点问题。使用加密技术是一种比较成功的保护方法。特别是在当今相互合作以及公共工作环境下,电脑中的资料可能对于写工作人员时可见的而对于另外一些工作人员是不可见的,对于一些文件进行加密是有必要的[2]。因此选择这个方面作为自己的论文研究方向,想通过对数据加密方法的研究对密码学有一个全面的认识,同时在研究过程中对当前已经比较成熟的加密算法进行学习并且总结和比较得出自己的结论并结合需求分析选择几种常见的加密算法设计、实现一个自己的单机文件加密系统。2系统采用的关键技术公开密钥密码系统一般是基于数学上难解的问题,所以其安全性高,同时,密钥的管理比较容易。缺点是它的密钥太长、运算速度比对称算法的慢很多;公开密钥密码系统生成一对公私钥的速度比较慢,通常需要几分钟以上,从而对有大量用户的系统而言,服务器的工作效率不高[3]。鉴于对称密钥密码算法和公开密钥密码算法的特点,综合使用DES对称密钥加密算法和RSA公开密钥加密算法来保障信息安全。大量数据用64bit密码长度的DES对称密码算法进行加密,而公开密钥密码算法则使用1024bit长度的RSA公开密钥加密算法进行加密,此种方法既保证了数据信息的安全又提高了数据加密和解密的速度,实现了对数据信息安全、加密效率的要求[4]。2.1DES算法的实现过程DES工作的基本原理是,其入口参数有三个:key、data、mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性[4]。DES算法是这样工作的:如Mode为加密,则用Key去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果[5]。对于单机用户用于保存不需在网络中传递的文件则只需要在加密的时候输入一个自己熟悉但相对来说比较复杂不易被其他人破解的密码串就行,记住该密码串在解密的时候输入就行。DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的,当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度[6]。2.2RSA算法的实现过程首先产生一对公钥和私钥:(l)选取两个大素数p和q(10到20个十进制数或更大),为了获得最大程度的安全性,两个数的长度最好相同。两个素数p和q必须保密。(2)计算p与q的乘积:n=p*q。(3)再由p和q计算另一个数Z,Z=(p-1)*(q-1)。(4)随机选取加密密钥e,使e和Z互素。(5)用欧几里德扩展算法计算解密密钥d,以满足e*d=lmod(z)。(6)由此而得到的两组数(n,e)和(n,d)分别被称为公开密钥和私人密钥,简称公钥和私钥[7]。其次是加密过程:RSA算法是一种分组加密算法,加密消息M时,首先将它分成比n小的数据分组(采用二进制数,选取小于n的2的最大次幂),也就是说,p和q为100位的素数,那么n将有200位,每个消息分组m,应小于200位长(如果需要加密固定的消息分组,那么可以在它的左边填充一些0并且保证该数比n小)。加密后的密文C,将由相同长度的分组组成。由上述RSA算法可知:若n被因式分解,则RSA便可以被击破。因为n=p*q,如果p和q已知,那么Z=(p-1)*(q-1)便可以算出,故满足条件e*d=lmod(Z)的解密密钥d也不难求出。因此RSA的安全性完全依赖于大数的分解难度。RSA算法的公开密钥和私人密钥是一对大素数(10到20个十进制数或更大)的函数。从一个公开密钥和密文中恢复出明文的难度等价于分解两个大素数之积[8]。目前因子分解速度最快的方法,其时间复杂性为:exp(Sqrt(ln(n)lnln(n))).从技术上讲,这种安全性只是一种推测。3系统的设计与实现根据需求分析,本系统的主要功能是保护存储在电脑的文件不被非法用户盗取后读取信息,面向用户主要是单机用户以及多用户系统,不涉及到网络传输,结合对称密钥加密体制和公开密钥加密体制的优缺点。设计主要功能有:读取文件路径,利用DES算法对文本文件中的数据进行加密和解密,利用RSA算法将DES算法的密钥加密并保存即密钥导出功能;同时可以导入加密后的DES密钥文件对其解密后辅助完成利用DES算法对数据的解密。主要功能如图1所示。与此同时考虑到加密后密钥的安全问题以及当前移动存储介质的普遍使用,系统可以将保存加密后的DES密钥的文件导出到移动存储介质中,以便更好的保护密钥的安全同时也方便了用户对密钥的管理。在以前功能上有几点修改,将以前的导出功能改为保存,保存只是将加密后的密钥文件保存在当前文件夹下,新添加的导出功能是将加密后的密钥文件导出到移动存储器中;将导入功能改为加载,加载是将解密后的密钥读取到系统辅助数据的解密,新添加的导入是将保存在移动存储器中的加密后的密钥文件导入到系统。经过添加功能后系统的功能图如图2所示。根据功能的不同将整个系统实现分为三个模块,分别为:MainFrame、DES、RSA。MainFrame的主要功能是显示系统界面,对系统界面布局进行定位并且接收由DES和RSA模块传来的参数辅助完成文件加密和解密功能,在加密和解密过程中给用户提供交互界面并文成加密后密钥的保存和导出及导入功能。DES的主要功能是接受由MainFrame传递过来的参数,对指定文件的数据进行加密和解密。RSA的主要功能接受由MainFrame传递的参数对指定的DES密钥进行加密并保存,同时可以将加密后的DES密钥导出,一边以后辅助完成数据解密功能。3.1MainFrame模块设计定义一个MainFrame类,主要是界面的初始化,同时在加密和解密过程中起到桥梁的作用,传递参数。同时所有的相应函数均封装在MainFrame类中,便以管理和界面的优化。界面的初始化及所有的响应按钮:publicclassMainframeextendsjavax.swing.JFrame主要响应按钮响应的函数如下:选择要加密或者解密的源文件,将文件路径传递DES对象并显示在文本框中,privatevoidjButton1ActionPerformed();输入DES密钥,并弹出对话框确认:privatevoidjButton2ActionPerformed();数据解密,通过调用DES对象中的加密函数对数据进行加密:privatevoidjButton4ActionPerformed();数据加密,首先通过调用DES对象中的获取密钥函数得到密钥,然后调用解密函数对数据进行解密:privatevoidjButton3ActionPerformed()生成RSA密钥对:privatevoidjButton6ActionPerformed()用RSA算法对DES密钥进行加密并保存:privatevoidjButton7ActionPerformed()将加密后的DES密钥文件导出到移动存储器中:privatevoidjButton14ActionPerformed()将RSA私钥导出到移动存储器中:privatevoidjButton16ActionPerformed()将经过加密并保存在电脑中的DES密钥解密并导入到加密系统:privatevoidjButton8ActionPerformed()结束系统:privatevoidjButton9ActionPerformed()3.2DES模块设计定义一个DES类,将参数和函数封装在DES类中。publicclassDES定义一个初始化函数和三个成员函数:publicvoidsetKey(Strings)//获得DES密钥publicvoidinit()//对DES加密初始化,主要调用java系统函数加密函数,source为要加密的文件的路径,result为加密后文件保存路径;因为在MainFrame模块中要对是否加密成功进行判断所以此函数要返回参数:publicStringencryptorFile(Stringsource,Stringresult)加密函数设计框架图如图3所示。解密函数,source为要解密的文件的路径,result为解密后文件保存路径;因为在MainFrame模块中要对是否解密成功进行判断所以此函数要返回参数:publicStringdecryptorFile(Stringsource,Stringresult)解密函数设计框架图如图4所示。3.3RSA模块设计定义一个RSA类,将主要参数和方法封装在RSA类中。publicclass:RSA定义三个成员函数:生成RSA的密钥和公钥并将私钥和公钥分别以dat文件形式保存在系统的当前文件夹中;因为在MainFrame模块中要对生成密钥是否成功进行判断所以此函数要返回参数;publicStringsetkey(),密钥生成函数设计框架图如图5所示。利用RSA公钥将传递进来的DES密钥进行加密并以dat文件形式保存在系统的当前文件夹中,传递过来的密钥是String形式的,只能由数字和字母组成;因为在MainFrame模块中要对是否加密成功进行判断所以此函数要返回参数;publicStringencryptorFile(StringDkey),加密函数设计框架图如图6所示。利用RSA私钥对保存的加密后的DES密钥解密并传递给MainFrame类中的解