DES加密算法课程设计 毕业设计
DES加密系统课程设计书

课程设计书DES算法实现工业工程0601:彭鑫学号:012006009207一.DES算法简介:DES(Data Encryption Standard,DES)起源于1973年美国国家标准局(NBS)征求国家密码标准方案。
IBM就提交了其在20世纪60年代末设立的一个计算机密码编码学方面的研究项目的结果,这个项目在1971年底研制出了一种称为Lucifer的算法。
它是当时提出的最好的算法,因而在1977年被选为数据加密标准,有效期为5年,随后在1983年、1987年、1993年三次再度授权该算法续用5年。
DES满足了美国国家标准局欲达到的4个目的:①提供高质量的数据保护即防止数据未经授权的泄露和未被察觉的修改②具有相当高的复杂性③使得破译的开销超过可能获得的利益④便于理解和掌握DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位。
首先,DES把输入的64位数据块按位重新组合,并把输出分为L0、R0左右两部分,每部分各长32位,并进行前后置换(输入的第58位换到第一位,第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解密得到原数据,这样便实现了安全性较高的数据传输。
(完整版)DES算法的实现及安全性分析毕业设计

DES算法的实现及安全性分析专业班级:计算机科学与技术1班姓名:廖孜孜完成日期: 2015年5月17日引言如果一个密码体制的加密密钥等于脱密密钥,或者其中一个很容易推出另一个,则称此密码体制为单密钥密码体制,也称为对称密码体制或传统密码体制。
最具有代表性的近代传统密码体制是DES(数据加密标准)。
为了适应社会对计算机数据安全保密越来越高的要求,美国国家标准局(NBS)于1973年向社会公开征集一种用于政府部门及民间进行计算机数据加密算法,许多公司提出了自己的加密算法,最后选中了IBM公司提出的一种加密算法。
经过一段时间的试用与征求意见,美国国家标准局于1977年公布了由IBM 公司研制的一种加密算法,批准把它作为非机要部门使用的数据加密标准,简称DES,DES是Data Encryption Standard的缩写。
自从公布以来,它一直超越国界成为国际上商用保密通信和计算机通信的最常用的加密算法。
原先规定使用期10年,可能是DES尚未受到严重的威胁,更主要的是新的数据加密标准还没有完成,或意见未一致,所以当时的美国政府宣布延长它的使用期。
因而DES超期服役了很长时间,20年来它一直活跃在国际上保密通信的舞台上,扮演了十分突出的角色。
进入20世纪九十年代后以色列的密码学家Shamir 等人提出了一种“差分分析法”,以后日本人又提出类似的方法,这才正式有一种称得上对它的攻击的方法。
严格地说,Shamir 的“差分分析法”也只有理论上的价值,至少目前为止是这样的。
又如,后来的“线性逼近法”,它是一种已知明文攻击法,需要2的43次方也就是4.398×10的12次方对明文-密文对,在这样强的要求条件下,有十多台工作站协同作战,还需要十天的时间。
在这以前已有人建议造专用装置来对付它,其基本想法无非是借用硬件来实现对所有密钥的遍历搜索。
当时估计一天可以搜索到一个密钥。
技术的进步使得搜索的时间进一步缩短,使DES受到了威胁,但DES毕竟辉煌过。
基于利用Matlab语言实现DES加密算法毕业设计

密码学与网络安全课程实验利用Matlab语言实现DES加密算法姓名:ZA 学号:XXXXX一、实验目的1)牢固掌握DES密码算法2)通过编程实现DES算法,深入掌握现代密码算法实现的基本方法3)验证DES算法中各个模块在实现混淆和弥散中的作用二、实验内容要求1)DES算法实现:利用Matlab语言实现DES密码算法,输入64比特明文和56比特密钥,加密得到64比特的密文;2)DES弱密钥验证:观察弱密钥两次加密的结果,与非弱密钥两次加密的结果进行比较;3)DES算法初步应用:尝试加密一个字符串,字符串的长度大于8个字节;4)DES弥散特性分析:试输出每一轮加密得到的比特序列,并比较当初始明文1个比特发生变化时,每一轮加密输出的哪些比特发生变化。
三、实验方案与步骤3.1DES算法实现a)算法实现方案Matlab(矩阵实验室)是一款工程计算用的软件,功能十分强大。
Matlab的计算基于矩阵,而DES算法用矩阵描述是十分简洁方便的。
因此,选用Matlab作为算法实现语言,基于一系列的矩阵变换、运算来实现DES算法的加密。
b)主要功能实现流程及代码解析1)加密程序图1 DES基本结构DES算法的结构非常简单,是一个16次的迭代。
核心是f函数中一系列变换。
根据算法框图,程序步骤主要分为三大部分:1)输入明文和密钥进行字符转换2)产生16轮密钥矩阵3)16轮迭代%%demo5.mclc, clear all;%%%----------第一步输入明文和密钥-------------%M='0123456789ABCDEF';%K='0123456789ABCDEF';%MB=[];for i=1:16Mi=M(i);MBi=['0000',dec2bin(hex2dec(Mi))];MBi=MBi(end-3:end);MBi=[str2num(MBi(1)),str2num(MBi(2)),str2num(MBi(3)),str2num(MBi(4) )];MB=[MB,MBi];endM=MB;%转化为64位二进制明文KB=[];for i=1:16Ki=K(i);KBi=['0000',dec2bin(hex2dec(Ki))];KBi=KBi(end-3:end);KBi=[str2num(KBi(1)),str2num(KBi(2)),str2num(KBi(3)),str2num(KBi(4) )];KB=[KB,KBi];endK=KB;%转化为64位二进制密钥%%%----------第三步产生密钥-------------%PC_1=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,1 9,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];%PC_1置换矩阵 56位KEY0=K(PC_1);%初始矩阵变换 64 to 56%循环移位>>>>>shift_array=-[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];C(1,:)=KEY0(1:28);%C0D(1,:)=KEY0(29:56);%D0for i=2:17C(i,:)=circshift(C(i-1,:)',shift_array(i-1))';%前28位循环移位%circshift是右移移动负数位表示左移D(i,:)=circshift(D(i-1,:)',shift_array(i-1))';%后28位循环移位endPC2=[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];Ki=zeros(16,48);%循环移位>>>>>KEY_MAT=[C,D];%17*56KEY_MAT=KEY_MAT(2:17,:);%16*56PC_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,3 6,29,32];for i=1:16Ki(i,:)=KEY_MAT(i,PC_2);endKEY=Ki;%%%----------第四步 Feistel结构-------------%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 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7];%IP初始置换矩阵M=M(IP);%初始置换m0_L=M(1:32); %输入的左半部分明文m0_R=M(33:64);%输入的右半部分明文[L,R]=fchange(m0_L,m0_R,1,KEY);mi=[L,R];mi2_hex(1,:)=mi%%进入16轮迭代>for i=2:16[L,R]=fchange(L,R,i,KEY);mi=[L,R];mi2_hex(i,:)=miendIP_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 5018 58 26 33 1 41 9 49 17 57 25];%%IP_1初始逆置换矩阵m16=[R,L];%最后一步进行交换C=m16(IP_1); %IP逆置换[m_hex]=m_2_hex(C)%转化为16进制输出密文%%function [Li,Ri] = fchange(Li_1,Ri_1,m,KEY)%%第i轮f函数的实现输入Ri-1 表示第i-1轮的右半部分密文输出第i轮的密文Ri_1_ex=trm32_to_48(Ri_1);%第一步右半明文进行32to48扩展 OKRi_1_ex2=reshape(Ri_1_ex',1,48);%将扩展的48位变为向量 OKf=bitxor(KEY(m,:),Ri_1_ex2);%与第i轮密钥按位异或f1=reshape(f,6,8)';%变为矩阵 8个6位二进制数 8*6%经过S1盒s=S_box(1);x=2*f1(1,1)+f1(1,6);%S盒纵坐标y=8*f1(1,2)+4*f1(1,3)+2*f1(1,4)+f1(1,5);%S盒横坐标f2=s(x+1,y+1); %取S盒中某一数f2_bin=['0000',dec2bin(f2)];% % 字符串处理f2_bin=f2_bin(end-3:end);f2_1=[str2num(f2_bin(1)),str2num(f2_bin(2)),str2num(f2_bin(3)),str2 num(f2_bin(4))];%省略s2~s8盒Ri_1_P=P_exchange(f2S);%转化为向量并置换运算PRi=bitxor(Li_1,Ri_1_P);%Li_1与f函数后的Ri_1进行按位异或Li=Ri_1;%交换位置end程序见c:\iknow\docshare\data\cur_work\demo5.m。
DES算法程序实现课程设计

DES算法程序实现课程设计一、课程目标知识目标:1. 理解DES算法的基本原理和加密流程;2. 掌握DES算法中子密钥生成、初始置换、轮函数和逆初始置换等关键步骤;3. 了解DES算法在实际应用中的优势和局限性。
技能目标:1. 能够运用编程语言(如Python、C++等)实现DES算法加密和解密过程;2. 学会分析并解决DES算法程序实现过程中遇到的问题;3. 培养学生的团队协作能力,通过小组合作完成课程项目。
情感态度价值观目标:1. 培养学生对密码学领域的兴趣,激发学习积极性;2. 培养学生的信息安全意识,了解加密技术在保护信息安全中的重要性;3. 引导学生树立正确的价值观,认识到技术对社会发展的积极影响。
分析课程性质、学生特点和教学要求:1. 课程性质:本课程为计算机科学与技术专业的选修课程,以实践为主,理论联系实际;2. 学生特点:学生具备一定的编程基础和密码学理论知识,对实际应用有较高的兴趣;3. 教学要求:注重理论与实践相结合,培养学生动手能力和解决问题的能力。
课程目标分解为具体学习成果:1. 知识目标:学生能够阐述DES算法的原理和流程,掌握相关术语;2. 技能目标:学生能够独立编写DES算法的加密和解密程序,并进行调试优化;3. 情感态度价值观目标:学生能够认识到密码学在信息安全领域的应用价值,提高自身信息安全意识。
二、教学内容1. DES算法基本原理:介绍DES算法的历史背景、加密流程、密钥生成等基本概念。
2. 子密钥生成:讲解子密钥的生成过程,包括初始密钥的置换、压缩和轮密钥的计算。
3. 初始置换和逆初始置换:分析初始置换和逆初始置换的作用,讲解具体实现方法。
4. 轮函数:详细介绍轮函数的结构,包括扩展置换、S盒替换、P盒置换等步骤。
5. DES算法编程实现:指导学生使用编程语言(如Python、C++等)实现DES算法的加密和解密过程。
6. DES算法应用案例分析:分析实际应用中DES算法的优缺点,探讨其在新一代加密算法中的地位。
des算法程序课程设计

des算法程序课程设计一、课程目标知识目标:1. 学生能理解DES算法的基本原理和加密流程;2. 学生能掌握DES算法中置换、替代、循环左移等关键步骤的操作方法;3. 学生能了解DES算法在实际应用中的优缺点及安全性分析。
技能目标:1. 学生能运用编程语言(如Python、C++等)实现DES加密和解密程序;2. 学生能通过实际操作,分析并解决DES算法编程过程中遇到的问题;3. 学生能对DES算法进行优化,提高加解密的效率。
情感态度价值观目标:1. 学生通过学习DES算法,培养对网络安全的认识和责任感;2. 学生在团队协作中,学会沟通、分享和分工合作,提高解决问题的能力;3. 学生在学习过程中,树立正确的信息安全观念,关注我国密码学领域的发展。
课程性质:本课程为信息技术学科,以算法编程为核心,旨在提高学生的实践操作能力和网络安全意识。
学生特点:学生为高中生,具有一定的编程基础和逻辑思维能力,对网络安全感兴趣。
教学要求:结合课本内容,注重理论与实践相结合,鼓励学生动手实践,培养创新意识和团队合作精神。
通过本课程的学习,使学生能够掌握DES算法的基本原理和编程技能,提高网络安全素养。
二、教学内容1. 引入:回顾密码学基本概念,引导学生了解加密技术在网络安全中的应用。
2. 理论知识:- DES算法原理:讲解Feistel网络结构、初始置换、16轮迭代、最终置换等过程;- 密钥生成:阐述子密钥生成过程,包括密钥置换、循环左移、压缩置换等步骤;- 置换和替代:介绍置换表、S盒等在加密过程中的作用。
3. 实践操作:- 编程实现:指导学生运用编程语言(如Python、C++等)实现DES算法的加密和解密功能;- 算法分析:通过实例,分析DES算法的安全性,讨论可能的攻击方法;- 优化改进:引导学生思考如何优化DES算法,提高加解密速度。
4. 教学进度安排:- 第1课时:回顾密码学基本概念,引入DES算法;- 第2课时:讲解DES算法原理,分析加密流程;- 第3课时:学习密钥生成过程,理解置换和替代操作;- 第4课时:编程实现DES算法,分析算法安全性;- 第5课时:优化DES算法,总结课程内容。
《信息安全、DES和AES加密解密》课程设计

信息安全概论院(系):专业班级:姓名:学号:日期:地点:指导教师:成绩:一、课程设计目标1.通过信息安全课程设计,能够增强我们对信息安全的认识,更加牢固的掌握信息安全概论相关知识。
2.综合运用学习到的理论知识,提高实践能力。
3.通过小组讨论形式对任务进行分解,提出实现方案,制定计划,小组成员分工协作,共同完成课程设计题目,培养团队合作能力。
4.运用熟悉的程序语言编写程序,增强对程序语言的运用。
5.课程设计期间,通过对问题的分析查找资料,培养资料查询以及运用现代信息技术获取相关信息并进行归纳总结的基本能力。
6.与同学讨论,互相学习,提升个人学习能力。
二、课程设计内容1课程设计的内容1.1确定课程设计方向:经过小组成员的商讨,确定了使用c#语言,编写一个对文件进行加密加密的小程序,运用DES算法,实现对文件的加密解密后,再添加一些小的功能,用AES算法,实现对字符串的加密解密。
1.2 查阅资料:通过查找文件加解密的资料以及查阅了相关的加密解密算法,学习了对文件加密解密的基本思路,与实现方法。
1.3界面设程序计:设计一个整体界面,有三个按钮,其中两个分别实现对应文件的加密解密和字符串的加密解密,还有一个退出程序功能按钮。
1.4程序设计:有了思路和方法,接着就借助c#语言分别实现对文件的加密解密,以及对字符串的加密解密小程序。
1.5 后期调试:程序实现后,对其进行调试,发现不合适的地方及时纠正。
1.6完成课程设计:写课程设计报告,完成课程设计。
2原理介绍2.1 DES加密原理DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。
这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。
使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。
DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。
DES课程设计

信息安全课程设计报告姓名:***专业:密码学学号:********分组密码DES加密解密1 分组密码DES加密解密概述最著名的对称密钥加密标准是数据加密标准(Data Encryption Standard,DES)。
DES使用一个56位的密钥以及附加的8位奇偶校验位,产生最大64 位的分组大小。
这是一个迭代的分组密码,使用称为Feistel 的技术,其中将加密的文本块分成两半。
使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。
DES 使用16个循环,使用异或,置换,代换,移位操作四种基本运算。
2 算法原理与设计思想DES算法的原理:DES算法的入口参数有3个:Key,,Data和Mode。
其中key为8个字节共64位,是Des算法的工作密钥。
Data也为8个字节64为,是要被加密或解密的数据。
Mode为DES的工作方式由两种:加密或解密。
如Mode为加密,则用key把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;若Mode为解密,则用key把密码形式的数据Data 解密,还原为Data的明码形式(64位)作为DES的输出结果。
算法实现步骤:2.1 实现加密过程需要3个步骤:第一步:变换明文。
对给定的64位的明文x.,首先通过一个置换IP表来重新排列x.,从而构造出64位的x0, x=IP(x)=LR,其中L表示x的前32位,R表示x的后32位。
第二步:按照规则迭代。
规则为:L i =Ri-1R i =Li⊕f(Ri-1, Ki) (i=1,2,3, (16)经过第1步变换已经得到L0和R的值,其中符号⊕表示数学运算“异或”,f表示一种置换,由s盒置换构成,Ki是一些由密钥编排函数产生的比特块。
F和Ki将在后面介绍。
第三步:对L16R16利用IP-1作逆置换,就得到了密文y加密过程。
(1)IP(初始置换)置换表和IP-1逆置换表输入的64位数据按IP表置换进行重新组合,并把输出分为L0和R两部分,每部分各32位,其IP表置换如表:IP表置换58 50 12 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 1 35 63 55 47 39 31 23 15 7将输入的64位明文的第58位换到第一位,第50位换到2位,依次类推,最后一位是原来的第7位。
DES加密算法课程设计报告

DES加密算法课程设计报告软件实现流程图开始输入密文和密钥密文和密钥转换成二进制,存储在文件中读出64位密文和密钥 64位密钥进行pc-1置换,生成56位 56位比特串分成左右各28位。
C[i]与D[i],i=0; C[i]与D[i]左移一位或者两位,左移表决定左移位数Ls[16].左移产生C[i+1]与D[i+1] C[i+1]与D[i+1]合并为56位比特串,并进行pc-2置换,产生子密钥keys[i+1],i++; i>15 N Y 节点1加密过程节点 1 64位明文进行IP置换后进行分组Li[32]与Ri[32];i=0 Ri[32]进行E扩展,生成48位比特串。
48位比特串与子密钥keys[i+1]进行异或运算。
得到的48位比特串分为8组,进入8个S盒中,并按照S盒的规则输出8个十进制数将8个十进制数转换为32位比特串。
32位比特串进行P置换,产生新的32位比特串 32位比特串与Li[32]进行异或,产生R(i+1)[32] L(i+1)[32]=Ri[32];i++ N i>15 Y R16[32]在前,L16[32]在后进行合并,合并后进行IP逆置换,即产生密文结束 1开始输入密文和密钥密文和密钥转换成二进制,存储在文件中读出64位密文和密钥 64位密钥进行pc-1置换,生成56位 56位比特串分成左右各28位。
C[i]与D[i],i=0;C[i]与D[i]左移一位或者两位,左移表决定左移位数Ls[16].左移产生C[i+1]与D[i+1] C[i+1]与D[i+1]合并为56位比特串,并进行pc-2置换,产生子密钥keys[i+1],i++; i>15 N Y 节点1加密过程节点 1 64位明文进行IP置换后进行分组Li[32]与Ri[32];i=0 Ri[32]进行E扩展,生成48位比特串。
48位比特串与子密钥keys[i+1]进行异或运算。
得到的48位比特串分为8组,进入8个S盒中,并按照S盒的规则输出8个十进制数将8个十进制数转换为32位比特串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要随着计算机的应用和网络技术的不断发展,网络间的通讯量不断的加大,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。
文件的加密主要是由加密算法实现,加密算法有多种,常见的有RSA、DES、MD5等。
本程序设计对文件的加密使用的是DES加密算法。
DES是分块加密的。
DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。
所以,当时DES被认为是一种十分强壮的加密方法。
但今天,只需二十万美元就可以制造一台破译DES的特殊的计算机,所以现在 DES 对要求“强壮”加密的场合已经不再适用了。
Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。
利用Java语言中秘密密钥工厂对DES算法的支持,使程序实现文件加密、解密两大功能更简单。
本程序设计所采用的就是DES算法。
同时利用Java的GUI编程,生成文本对话框,对文件的路径进行选择、提供密钥框、加密和解密按钮。
使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功能完善,满足了用户对文件安全性的需求。
关键词:JA V A ,DES,加密,解密。
目录1题目分析 (1)1.1课程设计的要求和内容 (1)1.2 DES算法描述 (1)2概要设计 (3)2.1抽象数据类型的定义 (3)2.1.1 程序所需要引入的包 (3)2.1.2 其他定义 (3)2.2主程序流程图 (4)2.3各程序模块之间的层次(调用)关系 (4)3详细设计 (6)3.1 窗体的设计与实现 (6)3.2文件导入模块 (8)4测试分析与结果 (9)4.1. 测试结果 (9)4.1.1运行程序 (9)4.1.2加密 (9)4.1.3解密 (11)总结 (13)参考文献 (14)附录 (15)1题目分析1.1课程设计的要求和内容基本要求:1.利用某种加密算法对指定的文本文件进行加密(应判断其是否已经加密,若已加密则结束该步骤,否则提示输入加密口令,对文件进行加密);2.加密解密方法:本设计采用DES加密算法。
3.还应该提供解密功能。
1.2 DES算法描述DES ( data encryption Standard) 是一种世界标准的加密形式,已经15 年历史了,虽然有些老,可还算是比较可靠的算法。
在七十的初期, 随着计算机之间的通信发展,需要有一种标准密码算法为了限制不同算法的激增使它们之间不能互相对话。
为解决这个问题, 美国国家安全局(N.S.A ) 进行招标。
I.B.M 公司开发了一种算法,称为:Lucifer。
经过几年的研讨和修改, 这种算法, 成为了今天的D.E.S,1976年11月23日,终于被美国国家安全局采用。
DES是一种分组加密算法,他以64位为分组对数据加密。
64位一组的明文从算法的一端输入,64位的密文从另一端输出。
DES是一个对称算法:加密和解密用的是同一个算法(除密钥编排不同以外)。
密钥的长度为56位(密钥通常表示为64位的数,但每个第8位都用作奇偶检验,可以忽略)。
密钥可以是任意的56位数,且可以在任意的时候改变。
DES算法的入口参数有3个:Key,Data,Mode。
其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或解密的数据:Mode为DES的工作方式,有两种:加密或解密。
DES算法的工作过程:若Mode为加密,则用Key对数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;若Mode为解密,则用Key对密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES 的输出结果。
在通信网络的两端,双方约定了一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式通过公共通信网(如电话网)传输到通信网络的终点,数据达到目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。
这样便保证了核心数据(如PIN,MAC等)在公共通信网中传输的安全性和可靠性。
通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融界交易网络的流行作法。
随着计算机网络的发展,加密技术也在迅速的发展中,加密解密技术的实现主要靠性能好的加密算法,而DES就是在实践中被证明的很好的算法,目前此算法已被广泛运用,且在使用中有了一些改进,DES算法给网络文件带来了可靠的安全性保证。
2概要设计2.1抽象数据类型的定义2.1.1 程序所需要引入的包import java.awt.*; //包含用于创建用户界面和绘制图形图像的所有类。
import java.awt.event.*; //提供处理由 AWT 组件所激发的各类事件的接口和类。
import javax.swing.*; //提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。
import java.io.*; //通过数据流、序列化和文件系统提供系统输入和输出。
2.1.2 其他定义new BorderLayout()对文件加密器对话框采用BorderLayout管理器。
new ActionListener()对文件的加密和解密设置事件监听器。
new ButtonGroup()定义一个按钮组。
new JRadioButton()将此按钮设置为属于一个按钮组的成员。
new FileInputStream()建立文件输入流以便进行文件的读操作,取其数据new FileOutputStream()建立文件输出流以便将数据写入文件shu1 用整形数据保存该密钥。
2.2主程序流程图图2 主程序流程图2.3各程序模块之间的层次(调用)关系模块定义(1)主函数模块:生成加密器框体;获取数据的输入;调用加密或解密函数。
(2)加密模块:判断密钥是否合法和文件是否已加密,启动加密操作,显示操作结果,并在与源文件同一文件夹下生成密文。
(3)加密操作模块:用DES方法加密输入的字节并返回。
(4)解密模块:判断密钥是否合法,启动解密操作,显示操作结果,并在指定的文件路径下生成明文。
(5)解密操作模块:用DES方法解密输入的字节并返回。
3详细设计3.1 窗体的设计与实现窗体的总体布局包含按钮、画布、文本框、标签等,合理分布达到视觉的美感。
代码实现:import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;public class key加密extends JFrame {int shu1;JLabel jl1,jl2;String cc;JButton queding, xuanz, jiami, jiemi;JTextField lujin,key;JTextArea nr;JRadioButton qu,xie;ButtonGroup fz;File f;public key加密(){Container c = getContentPane();JPanel jp1 = new JPanel();jl1 = new JLabel("输入路径");lujin = new JTextField(15);xuanz = new JButton("选择");jp1.add(jl1);jp1.add(lujin);jp1.add(xuanz);c.add(jp1, BorderLayout.NORTH);nr = new JTextArea();c.add(new JScrollPane(nr), BorderLayout.CENTER); qu = new JRadioButton("写入");xie = new JRadioButton("取出", true);fz = new ButtonGroup();fz.add(qu);fz.add(xie);jl2 = new JLabel("密钥");key = new JTextField(15);jiami = new JButton("加密");jiemi = new JButton("解密");JPanel jp4 = new JPanel();jp4.setLayout(new GridLayout(2, 1, 5, 5));JPanel jp2 = new JPanel();jp2.add(jl2);jp2.add(key);jp2.add(jiami);jp2.add(jiemi);jp4.add(jp2);JPanel jp3 = new JPanel();queding = new JButton("确定");jp3.add(qu);jp3.add(xie);jp3.add(queding);jp4.add(jp3);c.add(jp4, BorderLayout.SOUTH);queding.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent event) {jian();if (qu.isSelected())shuchu();if (xie.isSelected())qu();}});3.2文件导入模块实现目标文件的导入,通过选择按钮导入加密或解密的文件。
xuanz.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent event) {JFileChooser fileChooser = new JFileChooser(); // 实例化文件选择器fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); // 设置文件选择模式,此处为文件和目录均可if(fileChooser.showOpenDialog(key加密.this)==JFileChooser.APPROVE_OPTION) { // 弹出文件选择器,并判断是否点击了打开按钮String fileName=fileChooser.getSelectedFile().getAbsolutePath(); // 得到选择文件或目录的绝对路径lujin.setText(fileName);}}});4测试分析与结果4.1. 测试结果4.1.1运行程序首先在我机器E盘文件夹名为java1的文件夹离创建一个名为Example.doc 文档用做测试。