DES加密算法JAVA实现.docx
- 文档编号:130797
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:16
- 大小:72.20KB
DES加密算法JAVA实现.docx
《DES加密算法JAVA实现.docx》由会员分享,可在线阅读,更多相关《DES加密算法JAVA实现.docx(16页珍藏版)》请在冰豆网上搜索。
目录摘要.3一、目的与意义.4二、DES概述.5三、DES加解密算法原理.71.加密.62.子密钥生成.113.解密.13四、加解密算法的实现.141.软件版本.142.平台.143.源代码.144.运行结果.24五、总结.25【摘要】1973年5月15日,美国国家标准局现在的美国国家标准就是研究所,即NIST)在联邦记录中公开征集密码体制,这一举措最终导致了数据加密标准DES)的出现,它曾经成为世界上最广泛使用的密码体制。
DES由IBM开发,它是早期被称为Lucifer体制的改进。
DES在1975年3月17日首次在联邦记录中公布,在经过大量的公开讨论后,1977年2月15日DES被采纳为“非密级”使用的一个标准。
最初预期DES作为标准只能使用1015年;然而,事实证明DES要长寿得多。
被采纳后,大约每隔5年就被评审一次。
DES的最后一次评审是在1999年1月。
本文阐述了DES发展现状及对网络安全的重要意义,并在此基础上对DES算法原理进行详细的介绍和分析。
通过使用DES算法加解密的具体实现,进一步加深对DES算法的理解,论证了DES算法具有加密快速且强壮的优点,适合对含有大量信息的文件进行加密,同时分析了DES算法密钥过短56位)所带来的安全隐患。
【关键词】DES加密解密明文密文一、目的与意义随着计算机和通信网络的广泛使用,信息的安全性已经受到人们的普遍重视。
信息安全已不仅仅局限于政治,军事以及外交领域,而且现在也与人们的日常生活息息相关。
现在,密码学理论和技术已得到了迅速的发展,它是信息科学和技术中的一个重要研究领域。
在近代密码学上值得一提的大事有两件:
一是1977年美国国家标准局正式公布实行了美国的数据加密标准DES),公开它的加密算法,并批准用于非机密单位及商业上的保密通信。
密码学的神秘面纱从此被揭开。
二是Diffie和Hellman联合写的一篇文章“密码学的新方向”,提出了适应网络上保密通信的公钥密码思想,拉开了公钥密码研究的序幕。
DESDataEncryptionStandard)是IBM公司于上世纪1977年提出的一种数据加密算法。
在过去近三十年的使用中,还无法将这种加密算法完全、彻底地破解掉。
而且这种算法的加解密过程非常快,至今仍被广泛使用,被公认为安全的。
虽然近年来因为硬件技术的飞速发展,破解DES已经不是一件难事,但学者们似乎不甘心让这样一个优秀的加密算法从此废弃不用,于是在DES的基础上有开发了双重DESDoubleDES,DDES)和三重DESTripleDES,TDES)。
在国内,随着三金项目尤其是金卡项目的启动,DES算法在POS、ATM、磁卡及智能卡。
其中Li和Ri分别表示第i轮的左半部和右半部。
f(是运算函数,Ki是长为48位的子密钥。
子密钥K1,K2,,K16是根据56比特的密钥K计算而来的。
对比特串R16L16使用逆置换IP-1得到密文。
在DES被提出时,曾出现过很多批评,其中之一就是针对S盒。
DES里的所有计算,除了S盒,全是线性的也就是说,计算两个输出的异或与先将两个对应输入异或再计算其输出是相同的。
作为非线性部分,S盒对密码体制的安全性至关重要。
在DES刚提出时就有人怀疑S盒里隐藏了“陷门宣布一台造价不到25万美元、为特殊目的设计的“DES破译机”破译了DES时,DES终于被清楚地证明是不安全的。
三、DES算法加解密原理DES算法由加密、子密钥和解密的生成三部分组成。
现将DES算法介绍如下。
加密DES算法处理的数据对象是一组64比特的明文串。
设该明文串为m=m1m2m64(mi=0或1。
明文串经过64比特的密钥K来加密,最后生成长度为64比特的密文E。
其加密过程图示如下:
DES算法加密过程对DES算法加密过程图示的说明如下:
待加密的64比特明文串m,经过IP置换经过变换f(R0,K1做不进位二进制加法运算的结果,L16是R15的直接赋值。
R16与L16合并成64位的比特串。
值得注意的是R16一定要排在L16前面。
R16与L16合并后成的比特串,经过置换IP-1:
它的功能是将32比特的输入再转化为32比特的输出。
其过程如图所示:
f变换说明:
输入Ri-1(32比特经过变换E,合并后又成为32比特。
该32比特经过P变换压缩置换P)后,其下标列表如下:
经过P变换后输出的比特串才是32比特的fRi-1,Ki).S盒的变换过程:
任取一S盒。
见图:
在其输入b1,b2,b3,b4,b5,b6中,计算出x=b1*2+b6,y=b5+b4*2+b3*4+b2*8,再从Si表中查出x行,y列的值Sxy。
将Sxy化为二进制,即得Si盒的输出。
S表如图所示)P:
1672021291228171152326518311028241432273919133062211425以上是DES算法加密原理加密过程实现(JAVA主要源代码)输入64位明文串,经过IP置换:
for(i=0。
iMi=timeDataIPi-1。
迭代(因为各次迭代的方法相同只是输入输出不同,因此以任意一次为例:
首先进行S盒的运算。
输入32位比特串,经过E变换,由32位变为48位:
for(i=0。
iREi=R0Ei-1。
与keyarraytimesi按位作不进位加法运:
REi=REi+keyarraytimesi。
if(REi=2REi=0。
48位分成8组:
for(i=0。
ifor(j=0。
jSij=RE(i*6+j。
经过S盒,得到8个数:
sBoxDatai=S_Boxi(Si0+Si5(Si1+(Si2+(Si3+Si4。
将8个数变换输出二进制:
for(j=0。
jsValue(i*4+3-j=sBoxDatai%2。
sBoxDatai=sBoxDatai/2。
经过P变换:
RPi=sValuePi-1。
至此,S盒运算完成左右交换:
L1i=R0i。
R1i=L0i+RPi。
Ri为Li-1与f(R,K进行不进位二进制加法运算结果:
R1i=L0i+RPi。
if(R1i=2R1i=0。
各次迭代类似,可以依此类推。
2、子密钥的生成64比特的密钥生成16个48比特的子密钥。
其生成过程见图:
子密钥生成过程具体解释如下:
64比特的密钥K,经过PC-1置换A)后,生成56比特的串。
其下标如表所示:
PC-157494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124该比特串分为长度相等的比特串C0和D0。
然后C0和D0分别循环左移1位,得到C1和D1。
C1和D1合并起来生成C1D1。
C1D1经过PC-2的数值是不同的。
具体见下表:
迭代顺序12345678910111213141516左移位数1122222212222221子密钥的生成JAVA源代码):
输入64位K,经过PC-1变为56位:
for(i=0。
iK0i=keyPC_1i-1。
56位的K0,均分为28位的C0,D0。
C0,D0生成K1和C1,D1for(i=0。
i/循环左移一位c1i=c0i+1。
d1i=d0i+1。
c127=c00。
d127=d00。
elseif(offset=2for(i=0。
i/循环左移两位c1i=c0i+2。
d1i=d0i+2。
c126=c00。
d126=d00。
c127=c01。
d127=d01。
for(i=0。
iki=c1i。
/生成子密钥kiki+28=d1i。
注意:
生成的子密钥不同,所需循环左移的位数也不同。
在编程中,生成不同的子密钥应以上述offset表为准。
3解密DES的解密过程和DES的加密过程完全类似,只不过将16圈的子密钥序列K1,K2K16的顺序倒过来。
即第一圈用第16个子密钥K16,第二圈用K15,其余类推。
第一圈:
加密后的结果L=R15,R=L15f(R15,K16f(R15,K16=L15同理R15=L14f(R14,K15,L15=R14。
同理类推:
得L=R0,R=L0。
其程序源代码与加密相同。
四、加解密算法的实现1软件版本:
jdk1.6.0,JCreatorProv3.5.013汉化版2平台:
WindowsXP3源代码:
publicclassDesUtilbytebytekey。
publicDesUtil(StringstrKeythis.bytekey=strKey.getBytes(。
/声明常量字节数组privatestaticfinalintIP=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,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7。
/64privatestaticfinalintIP_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。
/64privatestaticfinalintPC_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,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4。
/56privatestaticfinalintPC_2=14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32。
/48privatestaticfinalintE=32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,1。
/48privatestaticfinalintP=16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25。
/32privatestaticfinalintS_Box=/S-盒/S_Box114,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,/S_Box215,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DES 加密算法 JAVA 实现