您好,欢迎访问三七文档
目录1.DES算法简介......................................................................................................12.功能分析.............................................................................................................13.DES的工作方式..................................................................................................23.1电子密码本模式(ECB)..............................................................................23.2加密块链模式(CBC).................................................................................23.3加密反馈模式(CFB)..................................................................................34.DES核心代码......................................................................................................34.1加密解密函数............................................................................................35测试结果..............................................................................................................56总结......................................................................................................................611.DES算法简介DESDataEncryptionStandard,DES起源于1973年美国国家标准局NBS征求国家密码标准方案。IBM就提交了其在20世纪60年代末设立的一个计算机密码编码学方面的研究项目的结果。这个项目在1971年底研制出了一种称为Lucifer的算法。它是当时提出的最好的算法,因而在1977年被选为数据加密标准,有效期为5年,随后在1983年、1987年、1993年三次再度授权该算法续用5年。DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位。首先,DES把输入的64位数据块按位重新组合,并把输出分为L0、R0左右两部分,每部分各长32位,并进行前后置换,(输入的第58位换到第1位,第50位换到第2位,依此类推,最后一位是原来的第7位),最终由L0输出左32位,R0输出右32位,根据这个法则经过16次迭代运算后,得到L16、R16,将此作为输入,进行与初始置换相反的逆置换,即得到密文输出。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据,Mode为DES的工作方式,有两种:加密或解密,如果Mode为加密,则用Key去把数据Data进行加密,生成Data的密码形式作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式作为DES的输出结果。在使用DES时,双方预先约定使用的“密码”即Key,然后用Key去加密数据;接收方得到密文后使用同样的Key解密得到原数据,这样便实现了安全性较高的数据传输。2.功能分析数据加密标准曾被美国国家标准局确定为联邦信息处理标准(FIPSPUB46),使用广泛,特别是在金融领域,曾是对称密码体制事实上的世界标准。目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、智能卡、加油站、2高速公路收费站等领域被广泛应用,以此来实现关键数据的保密。如信用卡持卡人的PIN的加密传输、IC卡与POS间的双向认证、金融交易数据包的MAC校验等均用到DES算法。因此,对于目前的电子交易市场以及一些商业领域DES依旧存在着广大的需求。这次课程设计所完成的DES算法,主要是要实现对输入的一组数据,进行DES加密,加密模式分为ECB、CBC、CFB、OFB四种。函数接口是用户自定义的,我们将完成它的内部构造,并封装成dll,以供用户程序调用。该算法所要完成的工作主要是,用户输入密钥以及明文,然后选择需要加密的方式。程序应该实现能判断用户输入的密钥长度是否正确以及输入的数据是否为空,在做出如上判断之后,还要对数据进行填充,填充的方式为,明文不足整块填充格式为L(1子节长度)+L个连续的0x80。比如刚好整块数据,最后填充7个0x80填充的数据为:0x070x800x800x800x800x800x800x80。再比如最后一块为7字节,那么填充的数据就为:0x00。在这些准备工作之后,方可对数据进行加密。在解密的时候,还要完成将填充的数据去掉,恢复以前输入的明文。3.DES的工作方式3.1电子密码本模式(ECB)这种模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。一个64位的密钥,如果采用该模式加密,就是将要加密的数据分成每组64位的数据,如果最后一组不够64位,那么就补齐为64位,然后每组数据都采用DES算法的64位密钥进行加密。3.2加密块链模式(CBC)CBC模式的加密首先也是将明文分成固定长度,(64位)的块,(P0P1...),然后将前面一个加密块输出的密文与下一个要加密的明文块进行XOR(异或)操作计算,将计算结果再用密钥进行加密得到密文。第一明文块加密的时候,因为前面3没有加密的密文,所以需要一个初始化向量(IV)。跟ECB方式不一样,通过连接关系,使得密文跟明文不再是一一对应的关系,破解起来更困难,而且克服了只要简单调换密文块可能达到目的的攻击。但是该加密模式的缺点是不能实时解密,也就是说,必须等到每8个字节都接受到之后才能开始加密,否则就不能得到正确的结果。这在要求实时性比较高的时候就显得不合适了。3.3加密反馈模式(CFB)加密反馈模式(CFB)为了克服必须等待8个字节全部得到才能进行解密的缺点,采用了一个64位,(8个字节)的位移寄存器来获得密文。所以能够实现字符的实时加密和解密,不用再等到8个字节都接受到之后再进行解密。其他特性和CBC差不多。4.DES核心代码4.1加密解密函数publicbyte[]DesEncrypt(byte[]des_data,intflag){byte[]format_key=ByteDataFormat(bytekey,flag);byte[]format_data=ByteDataFormat(des_data,flag);intdatalen=format_data.length;intunitcount=datalen/8;byte[]result_data=newbyte[datalen];for(inti=0;iunitcount;i++){byte[]tmpkey=newbyte[8];byte[]tmpdata=newbyte[8];4System.arraycopy(format_key,0,tmpkey,0,8);System.arraycopy(format_data,i*8,tmpdata,0,8);byte[]tmpresult=UnitDes(tmpkey,tmpdata,flag);System.arraycopy(tmpresult,0,result_data,i*8,8);}//当前为解密过程,去掉加密时产生的填充位byte[]decryptbytearray=null;if(flag==0){inttotal_len=datalen;intdelete_len=result_data[total_len-8-1];delete_len=((delete_len=1)&&(delete_len=8))?delete_len:0;decryptbytearray=newbyte[total_len-delete_len-8];booleandel_flag=true;for(intk=0;kdelete_len;k++){if(delete_len!=result_data[total_len-8-(k+1)])del_flag=false;}if(del_flag==true){System.arraycopy(result_data,0,decryptbytearray,0,total_len-delete_len-8);}}return(flag==1)?result_data:decryptbytearray;}55测试结果主界面:加密解密:66总结在做课程设计的过程中,我学会不少东西。大大提高了自己的编程能力和动手能力。与此同时,在这次的课程设计中我也看到了自己所存在的不足之处,通过这次课程设计,我更加系统的掌握了DES加密解密的过程及其原理,DES加密算法加密效率高,安全性强的相关原理,为以后的学习打下坚实的基础,同时也让我认识到了自己的很多不足,这就在客观上要求自己在以后的学习过程中要更加努力。7参考文献[1]张建密码学原理及应用技术清华大学出版社[2]张仕应用密码学西安电子科技大学出版社[3]杨波现代密码学清华大学出版社完整代码:package密码学;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassDES{byte[]bytekey;publicDES(StringstrKey){this.bytekey=strKey.getBytes();}//声明常量字节数组privatestaticfinalint[]IP={58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,827,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7};//64privatestaticfinalint[]IP_1={40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25};//64privatestaticfinalint[]PC_1={57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,
本文标题:DES加密解密算法
链接地址:https://www.777doc.com/doc-4460513 .html