版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 DES加密算法的实现及应用 DES加密算法的实现及应用学生姓名:梁帅 指导老师:熊兵 摘 要 随着信息与通信技术的迅猛发展和广泛应用,人们通过互联网进行信息交流,难免涉及到密码保护问题,这就需要使用DES加密技术来对数据进行加密保护。本课程设计介绍了DES加密的基本原理以及简单的实现方法。本课程设计基于C语言,采用DES算法技术,设计了DES加密程序,实现了DES加密解密功能。经测试,程序能正常运行,实现了设计目标。关键词 DES加密,C语言,信息交流1 引 言1.1本文主要内容DES是一个分组密码算法,使用64位密钥(除去8位奇偶校验,实际密钥长度为56位)对64比特的数据分组(二进制数据
2、)加密,产生64位密文数据。DES是一个对称密码体制,加密和解密使用同意密钥,解密和加密使用同一算法(这样,在硬件与软件设计时有利于加密单元的重用)。DES的所有的保密性均依赖于密钥。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。 DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用K
3、ey去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性DES的加密过程: 第一阶段:初始置换IP。在第一轮迭代之前,需要加密的64位明文首先通过初始置换IP 的作用,对输入分组实施置换。最后,按照置换顺序,DES将64位的置换结果分为左
4、右两部分,第1位到第32位记为L0,第33位到第64位记为R0。 第二阶段:16次迭代变换。DES采用了典型的Feistel结构,是一个乘积结构的迭代密码算法。其算法的核心是算法所规定的16次迭代变换。DES算法的16才迭代变换具有相同的结构,每一次迭代变换都以前一次迭代变换的结果和用户密钥扩展得到的子密钥Ki作为输入;每一次迭代变换只变换了一半数据,它们将输入数据的右半部分经过函数f后将其输出,与输入数据的左半部分进行异或运算,并将得到的结果作为新的有半部分,原来的有半部分变成了新的左半部分。用下面的规则来表示这一过程(假设第i次迭代所得到的结果为LiRi): Li
5、60;= Ri-1; Ri = Li-1f(Ri-1,Ki);在最后一轮左与右半部分并未变换,而是直接将R16 L16并在一起作为未置换的输入。 第三阶段:逆(初始)置换。 他是初始置换IP的逆置换,记为IP-1。在对16次迭代的结果(R16 L16)再使用逆置换IP-1后得到的结果即可作为DES加密的密文Y输出,即Y = IP-1 (R16 L16)。 DES解密过程: DES的解密算法与其加密算法使用的算法过程相同。两者的不同之处在于解密时子密钥Ki的
6、使用顺序与加密时相反,如果子密钥为K1K2K16,那么解密时子密钥的使用顺序为K16K15K1,即使用DES解密算法进行解密时,将以64位密文作为输入,第1次迭代运算使用子密钥K16,第2次迭代运算使用子密钥K15,第16 次迭代使用子密钥K1,其它的运算与加密算法相同。这样,最后输出的是64位明文。对数据进行加密传输能有效地保证数据的机密性,DES是一个保证数据机密性的经典算法,本次课程设计将基于C语言简单实现DES加密解密算法本文第二节介绍了DES算法的实现原理,第三节详细描述了DES加密算法的设计步骤,第四节为结束语。1.2设计平台笔记本,windows7 64bit操作系统,
7、Microsoft Visual C+6.0,C语言。2 设计原理2.1对称密码算法简介 对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要.对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处
8、是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。而与公开密钥加密算法比起来,对称加密算法能够提供加密和认证却缺乏了签名功能,使得使用范围有所缩小.在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。2.2 DES算法基本原理DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是56位,其算法主要分为两步2:1)初始置换其功能是把输入的64位数据
9、块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3D64,则经过初始置换后的结果为:L0=D58D50D8;R0=D57D49D7。2)逆置换经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。如图3.1.1。图2.2.1 DES算法流程图从子密钥Ki的生成算法描述图中我们可以看到:初始Key值为64位,但DES算法规定
10、,其中第8、16、.64位是奇偶校验位,不参与DES运算。故Key 实际可用位数便只有56位。即:经过缩小选择换位表1的变换后,Key 的位数由64 位变成了56位,此56位分为C0、D0两部分,各28位,然后分别进行第1次循环左移,得到C1、D1,将C1(28位)、D1(28位)合并得到56位,再经过缩小选择换位2,从而便得到了密钥K0(48位)。依此类推,便可得到K1、K2、.、K15,不过需要注意的是,16次循环左移对应的左移位数要依据下述规则进行:循环左移位数 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1图2.2.2子密钥生成图2.3 DES算法相关知识现如今,依靠I
11、nternet的分布式计算能力,用穷举密钥搜索攻击方法破译已成为可能。数据加密标准DES已经达到它的信任终点。但是作为一种Feistel加密算法的例子仍然有讨论的价值。 DES是对二元数字分组加密的分组密码算法,分组长度为64比特。每64位明文加密成64位密文,没有数据压缩和扩展,密钥长度为56比特,若输入64比特,则第8,16,24,32,40,48,56,64为奇偶校验位,所以,实际密钥只有56位。DES算法完全公开,其保密性完全依赖密钥。DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其功能是把输入的64位数据块按位重新组合,并把输出分为L0
12、160;、R0两部分,每部分各长32位,其置换规则见下表: 58501234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157即将输入的第58位换到第一位,第50位换到第2位,依此类推,最后一位是原来的第7位。 L0、R0则是换位输出后的两部分,L0是输出的左32位,R0 是右32位,例:设置换前的输入值为D1D2D3D64,则经过初始置换后的结果为:L0=D550D8;R0=D57
13、D49.D7。 经过26次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置的逆运算,例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,其逆置换规则如下表所示: 40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725放大换位表 321234545678989101112131213141516171
14、6171819202120212223242524252627282828293031321 单纯换位表 1672021291228171152326518311028241432273919133062211425在f(Ri,Ki)算法描述图中,S1,S2.S8为选择函数,其功能是把6bit数据变为4bit数据。下面给出选择函数Si(i=1,2.8)的功能表:选择函数Si S1: 144131215118310612590701574142131106121195384114813621115129731050151
15、2824917511314100613S2: 1518146113497213120510313471528141201106911501471110413158126932151381013154211671205149S3: 1009146315511312711428137093461028514121115113649815301112125101471101306987415143115212S4: 713143069101285111241513811561503472121101491069012117131513
16、1452843150610113894511127214S5: 2124171011685315130149141121247131501510398642111101378159125630141181271142136150910453S6: 1211015926801334147511101542712956113140113891415528123704101131164321295151011141760813S7: 411214150813312975106113011749110143512215861411131237141
17、0156805926111381410795015142312 S8: 13284615111109314501271151381037412561101492711419121420610131535821147410813151290356113子密钥Ki(48bit)的生成算法 初始Key值为64位,但DES算法规定,其中第8、16、.64位是奇偶校验位,不参与DES运算。故Key 实际可用位数便只有56位。即:经过缩小选择换位表1的变换后,Key 的位数由64 位变成了56位,此56位分为C0、D0两部分,各28位
18、,然后分别进行第1次循环左移,得到C1、D1,将C1(28位)、D1(28位)合并得到56位,再经过缩小选择换位2,从而便得到了密钥K0(48位)。依此类推,便可得到K1、K2、.、K15,不过需要注意的是,16次循环左移对应的左移位数要依据下述规则进行: 循环左移位数1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 以上介绍了DES算法的加密过程。 DES算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥K15,第二次K14、,最后一次用K0,算法本身并没有任何变化。所谓分组加密算法就是对一定大小的明文或密文来做加密或
19、解密动作。而在DES这个加密系统中,每次加密或解密的分组大小均为64位,所以DES没有密文扩充的问题。对大于64位的明文只要按每64位一组进行切割,而对小于64位的明文只要在后面补“0”即可。 另一方面,DES所用的加密或解密密钥也是64位大小,但因其中有8个位是用来作奇偶校验的,所以64位中真正起密钥作用的只有56位,密钥过短也是DES最大的缺点1。 DES加密与解密所用的算法除了子密钥的顺序不同外,其他部分完全相同。3设计步骤3.1设计思路DES解密过程为以上逆过程Des加密过程结束,输出Printi<N存入*Print,i+左部分(32位)j<16左右交换
20、,j+合并形成子密钥(48位)形成16轮密钥密钥压缩KetRar_Table(56位)转为二进制64位右部分(32位)文本段分为左右两部分文本第i段,转为二进制64位初始化:*Print,i=0,j=0分割enter,8字节为一段,不足补加,段数为N输入8字节密钥enter=待加密文本初始置换(Replacement)S置换(Replacement)P置换(Replacement)扩展置换(Replacement)Y最终置换(Replacement)NY N3.2程序实现加密函数:void Encryption(int m064,int c164) int i,k;int arry32;int
21、 c064,m164;Replacement(m0,IP_Table,m1,64); /初始置换IPfor(i=0;i<32;i+)/将明文分成两部分L,RL0i=m1i;R0i=m1i+32;k=1;while(k<17)/进行16次循环,将明文右部分与子密钥合并F_Function(Rk-1,arry,k-1);for(i=0;i<32;i+)Lki=Rk-1i;Rki=Lk-1iarryi;k+;for(i=0;i<32;i+)/合并为64位c0i=R16i;c0i+32=L16i;Replacement(c0,IP_1_Table,c1,64); /逆初始置换子
22、密钥的生成函数:void SubKey(int K064)int i;int K156,K256;int C1728,D1728;Replacement(K0,PC_1,K1,56);/密钥置换PC_1,将64位初始密钥压缩为56位。for(i=0;i<28;i+)/将PC_1输出的56比特分为左右两部分C0i=K1i;D0i=K1i+28;i=0;while(i<16)/进行16轮迭代,形成16轮密钥。int j;lif_move(Ci,Ci+1,move_timesi);/调用左移函数lif_move(Di,Di+1,move_timesi);for(j=0;j<28;j
23、+)/通过循环,将两部分密钥合并到K2中,此时K2为56位的K2j=Ci+1j;K2j+28=Di+1j;Replacement(K2,PC_2,Ki,48);/密钥置换PC_2,合并为48位密钥i+;子密钥生成过程中的循环左移函数:void lif_move(int arry1,int arry2,int n) /左移位实现函数int i;for(i=0;i<28;i+)/通过FOR循环,根据传入的n值,决定左移的位数arry2i=arry1(n+i)%28;/进行了模运算S盒压缩变换函数,其中数组shc存放经过s盒的结果:void S_compress(int arry,int sh
24、c)int h,l;/行,列int sha8; /存放经过s盒的十进制结果int i,j;int temp4;for(i=0;i<8;i+) /s盒压缩变换h=arry(1+(i*6)-1*2 + arry(6+(i*6)-1;/取二进制数两端为行l=arry(2+(i*6)-1*8+arry(3+(i*6)-1*4+arry(4+(i*6)-1*2 +arry(5+(i*6)-1; /取二进制数中间数为列。shai=S_Boxihl;根据行列值,在第i个S盒取出对应的位置上的值。 for(i=0;i<8;i+)/十进制转二进制。 for(j=3;j>=0;j-) tempj
25、=shai%2; shai=shai/2; for(j=0;j<4;j+) shc4*i+j=tempj; 密钥与一半明文的处理函数:void F_Function(int a32,int b32,int n)int i;int tmp48;int tep32;Replacement(a,E_Table,tmp,48);/扩展变换Efor(i=0;i<48;i+)/与子密钥异或tmpi = Kni;S_compress(tmp,tep); /压缩变换SReplacement(tep,P_Table,b,32); /置换运算P转换密钥函数,用于解密时用:void changeKey(
26、int a1648) int i,j;int tmp1648;for(i=0;i<16;i+)for(j=0;j<48;j+)tmpij=aij;for(i=0;i<16;i+)for(j=0;j<48;j+)Kij=tmp15-ij;解密函数:void Decryption(int c1,int m)int c064,t64;int i,k;int arry32;changeKey(K);/处理加密密钥为解密密钥Replacement(c1,IP_Table,c0,64);/初始置换for(i=0;i<32;i+)/密文分成两部分L0i=c0i;R0i=c0i+
27、32;k=1;while(k<17)/16次循环,合并密文右部分与子密钥F_Function(Rk-1,arry,k-1);for(i=0;i<32;i+)Lki=Rk-1i;Rki=Lk-1iarryi;k+;for(i=0;i<32;i+)/合并为64位ti=R16i;ti+32=L16i;Replacement(t,IP_1_Table,m,64); /逆初始置换置换函数:void Replacement(int arry1,int arry2,int arry3,int num)/根据传入的参数可以实现初始置换,逆初始置换,P置换,E置换 int i,tmp;for(i=0;i<num;i+)/num决定了最后输出的位数。tmp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届浙江省天略外国语学校高二物理第一学期期中经典试题含解析
- 2025届河南省洛阳市孟津县第二高级中学物理高一上期末学业质量监测试题含解析
- 2025届浙江省宁波市第七中学物理高二第一学期期中学业水平测试试题含解析
- 2025届山东省菏泽市东明县第一中学物理高一上期中统考试题含解析
- 淮北一中2025届物理高二上期末预测试题含解析
- 2025届泰州市重点中学物理高二第一学期期末经典试题含解析
- 2025届湖北省巴东三中物理高一第一学期期中检测试题含解析
- 江苏省泰兴市洋思中学2025届物理高二上期末复习检测试题含解析
- 男装网店运营课程设计
- 2025届学海大联考 高三上物理期中达标检测模拟试题含解析
- 《安全生产法培训课件》(2021版)
- 小学高年级《红楼春趣》剧本(宁波实验学校)
- 电网雷电预警技术研究及预警系统开发项目验收汇报
- 灌溉试验常规观测
- 水字的演变与含意
- 2023年高考化学反应原理专题复习《压强平衡常数》
- 人行道透水砖施工解决方案2445
- 2023年高考浙江卷英语试题(2023年1月考试-含听力音频、听力原文和答案)
- 高一上学期 期中考试后的家长会
- GB/Z 20423-2006液压系统总成清洁度检验
- 武警医院污水处理站施工组织设计
评论
0/150
提交评论