版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DES算法的实现及安全性分析专业班级:计算机科学与技术1班姓 名:廖孜孜学 号: 120103011126完成日期: 2015 年5月17日引言如果一个密码体制的加密密钥等于脱密密钥,或者其中一个很容易推出另一个, 则称此密码体制为单密钥密码体制,也称为对称密码体制或传统密码体制。最具有代表性的近代传统密码体制是 DES (数据加密标准)。为了适应社会对计算机数据安全保密越来越高的要求,美国国家标准局( NBS于 1973年向社会公开征集一种用于政府部门及民间进行计算机数据加密算法,许多公司提出了自己的加密算法, 最后选中了旧M公司提出的一种加密算法。经过一段时间的试用 与征求意见,美国国家标
2、准局于1977年公布了由 旧M公司研制的一种加密算法,批准把它作为非机要部门使用的数据加密标准,简称DES DES是Data Encryption Standard的缩写。自从公布以来,它一直超越国界成为国际上商用保密通信和计算机通信的最常 用的加密算法。原先规定使用期10年,可能是DES尚未受到严重的威胁, 更主要的是新的数据加密标准还没有完成,或意见未一致,所以当时的美国政府宣布延长它的使用期。因而DES超期服役了很长时间,20年来它一直活跃在国际上保密通信的舞台上,扮演了十分突出的角色。进入20世纪九十年代后以色列的密码学家 Shamir等人提出了一种“差分分析法”,以后日本人又 提出类
3、似的方法,这才正式有一种称得上对它的攻击的方法。严格地说,Shamir的“差分分析法”也只有理论上的价值,至少目前为止是这样的。又如,后来的“线性逼近法”, 它是一种已知明文攻击法,需要2的43次方也就是 4.398 X 10的12次方对明文-密文对,在这样强的要求条件下,有十多台工作站协同作战,还需要十天的时间。在这以前 已有人建议造专用装置来对付它,其基本想法无非是借用硬件来实现对所有密钥的遍历 搜索。当时估计一天可以搜索到一个密钥。技术的进步使得搜索的时间进一步缩短,使 DES受到了威胁,但 DE/竟辉煌过。它的思想还是值得借鉴。DEST法概述DES是一个对称算法:加密和解密用的是同一算
4、法(除密钥编排不同以外),既可 用于加密又可用于解密。它的核心技术是:在相信复杂函数可以通过简单函数迭代若干 圈得到的原则下,利用F函数及对合等运算,充分利用非线性运算。DES以64位为分组 对数据加密。每组64位,最后一组若不足 64位,以“0”补齐。密钥通常表示为 64位 的数,但每个第8位都用作奇偶校验,可以忽略,所以密钥的长度为56位,密钥可以是任意的56位的数,且可在任意的时候改变。其中极少量的数被认为是弱密钥,但能 容易地避开它们,所有的保密性依赖于密钥。DEST法的基本思想DES对64位的明文分组进行操作。通过一个初始置换,将明文分组分成左半部分 (L。)和右半部分(R。),各3
5、2位长。R)与子密钥Ki进彳f F函数的运算,输出32位的数, 然后与L。执行异或操作得到 Ri,Li则是上一轮的 R,如此经过16轮后,左、右半部分合 在一起,经过一个末置换(初始置换的逆置换),这样该算法就完成了。DESM法剖析DES 算法的加密由四部分完成,分别为:初始置换函数IP、子密钥的生成、密码函数F、末置换函数。 初始置换函数IP接受 长度为64位的明文输入,末置换 函数IP - 1输出64位的密文。 在子密钥的获取过程中,通过密钥置换Pc-1获取从Kl到K16共16个子密钥,这16个子密钥分别顺序应用于密码函数的16次完全相同的迭代运算中。DES的解密算法与加密算法完全相同,只
6、需要将密钥的应用次序与加密时相反应用即可。即解密过程是初始置换函数IP接受长度为64比特的密文输入,将16个子密钥按照K16到K1的顺序应用与函数 F的16轮迭代运算中,然后将迭代的结果经由末置换函数IP . 1得到64位的明文输出。DESU法运算过程DES 主要采用置换和移位运算来实现加解密,接下来深入剖析DES每个部分运算的实现过程。(1)初始置换函数IP64 位的明文分组x首先经过一个初始置换函数 IP进行置 换运算,产生一个 64位的输出X0,该输出被分成两个分别为 32位的左半部分L0和右半部分 已用于F函数的16轮迭代运算的首次迭代的初始输入。初始置换函数IP实际上就是一张8x8(
7、8行8列)的迭代 表,如表I所示。明文分组中的64位按照表中的规定重新进 行排序,其排列顺序为从左到右,从上到下。按表 I所示,明文中的第58位被放置在xo的第1位, 第50位防止在第2位,依次类推。IP:58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157初始置换表(2)获取子密钥 Ki子密钥的获取主要通过置换和移位运算来实现。DES加密算法的密钥长度为 56位,由用户提供,是DES算法的输入之一。但用户输入
8、的密钥是64位的,按8行8列从左 到右从上到下地排列,其中,每行的第8位用于奇偶校 验。在DES加密算法中,子密钥获取过程中,DES经过一系 列的置换和移位运算,得到Kl到K16共16个子密钥,每 个子密钥长48位。其实现过程如下:首先将军入的64位密钥去掉最后一列的 8个校-l验位,然后用密钥置换函数 PC对剩下的56位密钥进行置换。PC -157494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124用户输入的64位密钥中,第8、16、24、3
9、2、40、48、56、64共8个校验位被去掉。剩余的56位按表2所示排放:第57位放在第1位,第49位放在第-12位,依次 类推。 经过PC置换后,将其置换的输出再分为前28位C0和 后28位D0和两部分,上一轮置换得到的输出的两部分经过循环左移I位或2位后,每轮按表3进行移位,然后将两部 分合并成56位,之后经过压缩置换 PC2后得到当前这轮置换 的48位子密钥。根据轮数,C和D分别经过LS循环左移1位或2位。16次循环左移的位数依据下列规 则进行:迭代顺序12345678910111213141516左移位数1122222212222221每轮移动的位数141711241532815621
10、1023191242681672720132415231374755304051453348444939563453464250362932压缩置换pC2pC2置换为压缩置换,即置换后的输出数据的位数要比置换前输入的位数要少,即某些位的数据在置换的过程中被去掉了。由表4可知,在压缩置换过程中,原来的7行8列 共58位数据被压缩成8行6列的48位数据。在压缩置换过 程中,第9、18、 22、25、35、38、43、54共8位数据被丢掉。同时,将上一轮移位后得到的两部分再按上面的每轮移动的位数进行移位,作为下一个子密钥产生的 PC2置换的输入。依次经过16次循环左移和16次置换得到16个子密钥。子
11、密钥的产生流图:64位密钥子密钥的产生(3) DES的迭代过程DES算法有16次迭代,迭代如图所示。从图中可得到 Li=R-1 , R=Li-1 F(Ri-1,K i),i=1,2,315,16 0IPDES第16圈的加密过程F函数的实现原理是将Ri-i进行扩展置换后其结果与Ki进行异或,并把军出内容执行S盒替代与P盒转换后得到F(Ri-i ,Ki),其原理如下所示。R-i (32 位)扩展置换也叫做E盒,它将数据右半部分从 32位扩展到48位,改变了位的次序, 重复了某些位,比原输入长了 16位,数据位仍取决于原输入。扩展置换的48位输出按顺序分成8组,每组6位,分另I输入8个S子盒,每个子
12、盒输出4位,共32位。假设 将S盒的6位的输入标记为 bi、b2、b3、b4、b5、b6,则bi和b6组合构成了一个 2 位的数,从0至IJ3,它对应着S表中的一行。从b2到b5构成了一个4位的数,从0到 15,对应着表中的一列,行列交汇处的数据就是该S盒的输出。每个S盒可被看作一个4位输入的代替函数:b2到b5直接输入,输出结果为4位,bi和b6位来自临近的分组, 它们从特定的S盒的个代替函数中选择一个。这是该算法的关键步骤,所有其他的运 算都是线性的,易于分析,而 S盒是非线性的,它比DES他任何一步提供了更好的安 全性。P盒转换是把每个输入位映射到输出位,任意一位不能被映射两次,也不能被
13、略 去。(4)末置换P:1672021291228171152326518311028241432273919133062211425E:3212345456789891011121312131415161716171819202120212223242524252627282928293031321将(3)中8个6位数据的置换结果连在一起,形成一 个32位的输出,输出结果再通过一个P盒置换产生一个32位的输出。P盒置换如上表所示。最后,P盒置换的结果与左半部分进行异或运算,然后将左右两半部分交换。之后进入下一轮迭代。在完成完全相同 的16轮运算后,将得到的两部分数据合在起,再经过一个末置换函
14、数IP-1即可得到64位的密文。IP-140848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725DES的主要解密成果DES的安全性完全依赖于所用的密钥,自从DES乍为标准起,人们对它的安全性就有激烈的争论,下面简要介绍 20年来对DES的一些主要研究成果。(1)互补性DESM有性质:若明文组 x逐位取补得x密钥k逐位取补得k,且y=DES(x),则y=DES(x),其中y是y的逐位取补。这种特征称为算法上的互补性。
15、这种互补性表明在选择明文攻击下仅需试验其可能的256个密钥的一半255个即可。另外,互补性告诫人们不要使用互补密钥。(2)弱密钥和半弱密钥-1一大多数密码都有明显的“坏 密钥,DES也不例外。若DES ( ) =DES ( ),即如果k确定的加密函数与解密函数一致,则称k是一个弱密钥。DES至少有4个弱密钥,因为在产生密钥时,初始密钥被分成了两半,每半各自独立的移位,如果每一半的所有位都是0或1,那么密钥方案中的所有密钥都是相同的,即k1=k2=.=k16 ,这样DES ( ) =DES-1 ( )。易知,这样的情况至少有4种可能,很可能不存在其它弱密钥。若存在一个不同的密钥 k,使DES,(
16、 )=DES-1 ( ),则称k是一个半弱密钥。此时我们也称密钥k和k,是对合的。半弱密钥的特点是成对地出现。DES 至少有12个半弱密钥,因为产生 C0=1010.10 和D0=00.0 或11.1 或 1010.10 或0101.01 的密钥与产生 C0=0101.01 和 D0=00.0 或11.1 或 0101.01 或1010.10的密钥时互为对合的,同样地与C0=0101.01,D0=1010.10 或D0=0101.01 的密钥也是互为对合的,这样就至 少有(4 X 4 + 4 X 2) /2=12个半弱密钥,好像不存在另外的半弱的密钥。弱密钥和半弱密钥直接引起的唯一 “危险”是
17、对多重加密,当选用弱密钥时,第二 次加密使第一次加密复原。如果随机地选择密钥,则在总数256个密钥中,弱密钥和半弱密钥所占的比例极小,因此,弱密钥和半弱密钥的存在不会危及到DES的安全性。(3)密文与明文、密文与密钥的相关性一些文献详细研究了 DES的输入明文与密文以及密钥与密文之间的相关性。研究结 果表明可使每个密文bit都是所有明文bit和所有密钥bit的复合函数,并且指出要达 到这一要求至少需要迭代 5轮。用x2检验证明,迭代8轮后输入和输出就可认为是不相 关的了。(4) S-盒的设计S-盒是DE珊法的心脏,DESg它实现非线性变换,关于 S-盒的设计准则还没有 完全公开。许多密码学家怀
18、疑 NSA<tf S-盒时隐藏了 “陷门”使得只有他们在可以破译 算法,但没有证据能证明这点。在 1976年,NSA披露了 S-盒的下面几条设计原则:每一个S-盒的每一行是整数0-15的一个置换;每个S-盒的输出都不是它的输入的线性或仿射函数;改变S-盒的一个输入bit ,其输出至少有2bit发生变化;对任何S-盒和任何输入x, s(x)和s(x(+001100)至少有2bit不同(这里x是一个 长度为6的bit串);对任何S-盒和任何输入x以及e, f C0,1,S(x)wS(x(+11ef00),其中x是一个长度为6的bit串;对任何S-盒,当它的任一输入位保持不变,其他 5位输入变
19、化时,输出数字中的 0和1的总数接近相等。(5) DES的攻击方法目前攻击DES的主要方法有差分攻击、线性攻击和相关性密钥攻击等方法,在这些攻击方法中,线性攻击方法是最有效的一种方法。C语言实现DESM法1.首先,头文件与宏定义#include "stdio.h"#include "memory.h"#include "time.h"#include "stdlib.h"#define PLAIN_FILE_OPEN_ERROR-1#define KEY_FILE_OPEN_ERROR2#define CIPHER
20、_FILE_OPEN_ERROR3#define OK 1 2.对基本数据类型进行 typedef Typedef char ElemType;3.初始置换表,逆初始置换表,/初始置换表IPint IP_Table64 = S盒等已知数据的定义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,56,48,40,32,24,16,8,0,58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4, 62,54,46,38,30,22,
21、14,6;/逆初始置换表IP-1int IP_1_Table64=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,32,0,40,8,48,16,56,24);/扩充置换表Eint E_Table48=31,0,1,2,3,4, 3,4,5,6,7,8, 7,8,9,10,11,12, 11,12,13,14,15,16, 1
22、5,16,17,18,19,20, 19,20,21,22,23,24, 23,24,25,26,27,28, 27,28,29,30,31,0;/置换函数Pint P_Table32=15,6,19,20,28,11,27,16, 0,14,22,25,4,17,30,9, 1,7,23,13,31,26,2,8, 18,12,29,5,21,10,3,24);/S盒int S8416=/S114,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
23、,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,/S2 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10), 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15), 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,/S310,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9
24、,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, /S47,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, /S52,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10
25、,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, /S612,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13, /S74,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 13,0,11,7,4
26、,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12, /S813,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11;/置换选择1int PC_156= 56,48,40,32,24,16,
27、8,0,57,49,41,33,25,17, 9,1,58,50,42,34,26, 18,10,2,59,51,43,35, 62,54,46,38,30,22,14, 6,61,53,45,37,29,21, 13,5,60,52,44,36,28, 20,12,4,27,19,11,3;/置换选择2int PC_248= 13,16,10,23,0,4,2,27,14,5,20,9,22,18,11,3, 25,7,15,6,26,19,12,1, 40,51,30,36,46,54,29,39, 50,44,32,46,43,48,38,55, 33,52,45,41,49,35,28
28、,31;/对左移次数的规定int MOVE_TIMES16 = 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1;4 .函数声明 int ByteToBit(ElemType ch,ElemType bit8);int BitToByte(ElemType bit8,ElemType *ch);int Char8ToBit64(ElemType ch8,ElemType bit64);intBit64ToChar8(ElemType bit64,ElemTypech8);int DES_MakeSubKeys(ElemType key64,ElemType subKeys1648
29、);intDES_PC1_Transform(ElemType key64,ElemTypetempbts56);intDES_PC2_Transform(ElemType key56,ElemTypetempbts48);intDES_ROL(ElemType data56, int time);intDES_IP_Transform(ElemType data64);intDES_IP_1_Transform(ElemType data64);intDES_E_Transform(ElemTypedata48);intDES_P_Transform(ElemTypedata32);intD
30、ES_SBOX(ElemType data48);intDES_XOR(ElemType R48,ElemType L48,int count);intDES_Swap(ElemType left32,ElemTyperight32);intDES_EncryptBlock(ElemTypeplainBlock8,ElemTypesubKeys1648,ElemType cipherBlock8);intDES_DecryptBlock(ElemTypecipherBlock8,ElemType subKeys1648,ElemType plainBlock8);int DES_Encrypt
31、(char *plainFile, char *keyStr,char *cipherFile);int DES_Decrypt(char *cipherFile, char *keyStr,char *plainFile);5 .函数实现/字节转换成二进制int ByteToBit(ElemType ch, ElemType bit8) int cnt;for(cnt = 0;cnt < 8;cnt+)*(bit+cnt) = (ch>>cnt)&1;return 0;/二进制转换成字节int BitToByte(ElemType bit8,ElemType *ch
32、) int cnt;for(cnt = 0;cnt < 8;cnt+)*ch |= *(bit + cnt)<<cnt;return 0;/将长度为8的字符串转为二进制位串int Char8ToBit64(ElemType ch8,ElemType bit64)int cnt;for(cnt = 0; cnt < 8;cnt+)ByteToBit(*(ch+cnt),bit+(cnt<<3);return 0;/将二进制位串转为长度为8的字符串int Bit64ToChar8(ElemType bit64,ElemType ch8) int cnt;mems
33、et(ch,0,8);for(cnt = 0; cnt < 8;cnt+)BitToByte(bit+(cnt<<3),ch+cnt);return 0;/生成子密钥int DES_MakeSubKeys(ElemType key64,ElemType subKeys1648) ElemType temp56;int cnt;DES_PC1_Transform(key,temp);PC1置换for(cnt = 0; cnt < 16;cnt+)/16 轮跌代,产生 16个子密钥DES_ROL(temp,MOVE_TIMEScnt); 循环左移DES_PC2_Transf
34、orm(temp,subKeyscnt);PC2置换,产生子密钥return 0;/密钥置换1int DES_PC1_Transform(ElemType key64, ElemType tempbts56) int cnt;for(cnt = 0; cnt < 56;cnt+)tempbtscnt = keyPC_1cnt;return 0;/密钥置换2int DES_PC2_Transform(ElemType key56, ElemType tempbts48) int cnt;for(cnt = 0; cnt < 48;cnt+)tempbtscnt = keyPC_2cn
35、t;return 0;/循环左移int DES_ROL(ElemType data56, int time)ElemType temp56; memcpy(temp,data,time);memcpy(temp+time,data+28,time);memcpy(data,data+time,28-time);memcpy(data+28-time,temp,time);memcpy(data+28,data+28+time,28-time);memcpy(data+56-time,temp+time,time);return 0;/IP置换int DES_IP_Transform(ElemT
36、ype data64)int cnt;ElemType temp64;for(cnt = 0; cnt < 64;cnt+)tempcnt = dataIP_Tablecnt;memcpy(data,temp,64);return 0;/IP逆置换int DES_IP_1_Transform(ElemType data64)int cnt;ElemType temp64;for(cnt = 0; cnt < 64;cnt+)tempcnt = dataIP_1_Tablecnt;memcpy(data,temp,64);return 0;/扩展置换int DES_E_Transfo
37、rm(ElemType data48)int cnt;ElemType temp48;for(cnt = 0; cnt < 48;cnt+)tempcnt = dataE_Tablecnt;memcpy(data,temp,48); return 0;/P置换int DES_P_Transform(ElemType data32)int cnt;ElemType temp32;for(cnt = 0; cnt < 32;cnt+)tempcnt = dataP_Tablecnt;memcpy(data,temp,32);return 0;/异或count)int DES_XOR(E
38、lemType R48, ElemType L48 ,int int cnt;for(cnt = 0; cnt < count; cnt+) RcntA=Lcnt;return 0;/S盒置换int DES_SBOX(ElemType data48)intcnt;intline,row,output;int cur1,cur2;for(cnt = 0;cnt < 8;cnt+)cur1 =cnt*6;cur2 =cnt<<2;line =(datacur1<<1)+datacur1+5;row =(datacur1+1<<3)+(datacur1
39、+2<<2)+ (datacur1+3<<1)+ datacur1+4;output=Scntlinerow;datacur2=(output&0X08)>>3;datacur2+1=(output&0X04)>>2;datacur2+2=(output&0X02)>>1;datacur2+3=output&0x01;return 0;/交换 int DES_Swap(ElemType left32, ElemType right32) ElemType temp32; memcpy(temp,left
40、,32); memcpy(left,right,32);memcpy(right,temp,32); return 0;/加密单个分组 int DES_EncryptBlock(ElemType plainBlock8, ElemType subKeys1648, ElemType cipherBlock8) ElemType plainBits64; ElemType copyRight48; int cnt; Char8ToBit64(plainBlock,plainBits); DES_IP_Transform(plainBits); /16轮迭代for(cnt = 0; cnt <
41、; 16;cnt+)memcpy(copyRight,plainBits+32,32);DES_E_Transform(copyRight);DES_XOR(copyRight,subKeyscnt,48);DES_SBOX(copyRight);DES_P_Transform(copyRight);DES_XOR(plainBits,copyRight,32);if(cnt !=15)DES_Swap(plainBits,plainBits+32); DES_IP_1_Transform(plainBits);Bit64ToChar8(plainBits,cipherBlock);retur
42、n 0;/解密单个分组int DES_DecryptBlock(ElemType cipherBlock8, ElemType subKeys1648, ElemType plainBlock8) ElemType cipherBits64;ElemType copyRight48; int cnt;Char8ToBit64(cipherBlock,cipherBits); DES_IP_Transform(cipherBits); /16轮迭代 for(cnt = 15; cnt >= 0;cnt-)memcpy(copyRight,cipherBits+32,32); DES_E_T
43、ransform(copyRight); DES_XOR(copyRight,subKeyscnt,48);DES_SBOX(copyRight);DES_P_Transform(copyRight); DES_XOR(cipherBits,copyRight,32); if(cnt !=0)DES_Swap(cipherBits,cipherBits+32);DES_IP_1_Transform(cipherBits); Bit64ToChar8(cipherBits,plainBlock); return 0;/加密文件 int DES_Encrypt(char *plainFile, c
44、har *keyStr,char *cipherFile) FILE *plain,*cipher; int count; ElemType plainBlock8,cipherBlock8,keyBlock8; ElemType bKey64; ElemType subKeys1648; if(plain = fopen(plainFile,"rb")= NULL)returnPLAIN_FILE_OPEN_ERROR; if(cipher = fopen(cipherFile,"wb") = NULL) returnCIPHER_FILE_OPEN_
45、ERROR; memcpy(keyBlock,keyStr,8); Char8ToBit64(keyBlock,bKey); DES_MakeSubKeys(bKey,subKeys); while(!feof(plain) if(count = fread(plainBlock,sizeof(char),8,plain)= 8)DES_EncryptBlock(plainBlock,subKeys,cipherBlock);fwrite(cipherBlock,sizeof(char),8,cipher);if(count)memset(plainBlock + count,'0
46、39;,7- count);plainBlock7 = 8 - count; DES_EncryptBlock(plainBlock,subKeys,cipherBlock); fwrite(cipherBlock,sizeof(char),8,cipher);fclose(plain);fclose(cipher); return OK; /解密文件 int DES_Decrypt(char*cipherFile,char *keyStr,char *plainFile)FILE *plain,*cipher;int count,times = 0;long fileLen;ElemType
47、 plainBlock8,cipherBlock8,keyBlock8;ElemType bKey64;ElemType subKeys1648; if(cipher = fopen(cipherFile,"rb")= NULL)return CIPHER_FILE_OPEN_ERROR; if(plain = fopen(plainFile,"wb") = NULL)return PLAIN_FILE_OPEN_ERROR; /设置密钥memcpy(keyBlock,keyStr,8);Char8ToBit64(keyBlock,bKey);DES_M
48、akeSubKeys(bKey,subKeys);fseek(cipher,0,SEEK_END);/ 将文件指针置尾fileLen = ftell(cipher);/取文件指针当前位置rewind(cipher);/将文件指针重指向文件头while(1) fread(cipherBlock,sizeof(char),8,cipher); DES_DecryptBlock(cipherBlock,subKeys,plainBlock); times += 8; if(times < fileLen) fwrite(plainBlock,sizeof(char),8,plain);else
49、 break; /判断末尾是否被填充 if(plainBlock7 < 8) for(count = 8 - plainBlock7; count < 7; count+) if(plainBlockcount != '0') break; if(count = 7)/ 有填充 fwrite(plainBlock,sizeof(char),8- plainBlock7,plain);else/ 无填充 fwrite(plainBlock,sizeof(char),8,plain);fclose(plain); fclose(cipher); return OK; 6
50、 .主函数int main() clock_t a,b; a = clock(); DES_Encrypt("1.txt","key.txt","2.txt"); b = clock();printf(" 加密消耗媳秒n",b-a); system("pause");a = clock();DES_Decrypt("2.txt","key.txt","3.txt"); b = clock(); printf(" 解密消耗媳秒n
51、",b-a); getchar(); return 0; deST法安全性问题 deST法密钥的长度最初的罗斯福密码中密钥长度为128位,DES勺加密单位仅有64位二进制,而且其中某些位还要用于奇偶校验或其他通讯开销,有效密钥只有56位,这对于数据传输来说太小,各次迭代中使用的密钥K是递推产生的,这种相关性必然降低了密码体制的安全性。因此,人们 会对56位密钥的安全性产生质疑,那么56位密钥是否足够,已成为人们争论的焦点之一。至今,最有效白破解DEST法的方法是穷举搜索法,那么56位长的密钥总共要测试 256次,如果每100毫秒可以测试1次,那么需要7.2X1015秒,大约是228,
52、493,000年。但是,仍有学 者认为在可预见的将来用穷举法寻找正确密钥已趋于可行,所以若要安全保护10年以上的数据最好不用DESI法。近年来有人提出用差分和线性攻击方案来破解DEST法,虽然,从理论上来说破译的性能高于穷举搜索法,但要有超高速计算机提供支持,以致于美国国家保密局和计算机科学技术学会组织各界专家研究 DE璃码体制的安全性问题后,得出乐观的结论:没有任何可以破 译DES®码体制的系统分析法。若使用穷举法,则在1990年以前基本上不可能产生出每天能破译一个DE随钥的专用计算机。即使届时能制造出这样的专用机,它的破译成功率也只会 在0.1至U0.2之间,而且造价可能高达几千
53、万美元。根据目前的计算技术和DES勺分析情况,16-圈DES(采用16轮迭代)仍然是安全的,但提醒使用者不要使用低于16-圈的DES特别是10-圈以下的DES尽管如此,我们仍然需要考虑对DEST法进行改进,使密钥长度增加些,以实现更好的保密功能。多重DESW法针对DEST法上的缺陷,各国专家们都在研究如何增强DEST法的安全性,现在已发展出几十种改进的DES,经过比较,笔者认为多重 DE混有较高的可行性。为了增加密钥的长度,采用多重DESf密技术,将分组密码进行级联,在不同的密钥作用下,连续多次对一组明文进行加密。针对DEST法,专家们的共识是采用重 DE口密算法。重DE防法需要执行次常规的 DE劭口密步骤,但最常用的重DE湃法中仅仅用两个56位DE随钥。假设这两个密钥为 K与K2,其算法的步骤是:(1)用密钥Ki进行DESm密;(2)用步骤1的结果使用密钥 &进行DES军密;(3)用步骤2的结果使用密钥Ki进行DE口密。这个过程称为EDE0H密-解密-加密)。三重DEST使加密密钥长度扩展到 128位,其中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人教版八年级数学寒假预习 第06讲 勾股定理的逆定理(1个知识点+4大考点举一反三+过关测试)
- 【红对勾】2020-2021学年人教版高中物理选修3-1作业:3-6-带电粒子在匀强磁场中的运动
- 浙江省丽水莲都区2023-2024学年第二学期期末检测卷 六年级下册科学
- 【名师一号】2020-2021学年高中英语选修六-双基限时练13
- 【名师一号】2020-2021学年高中英语(外研版)必修二-双基限时练14
- 2021高考英语一轮课下限时训练及答案(人教新课标必修2Unit-2)
- 《产碱杆菌肺炎》课件
- 一年级数学(上)计算题专项练习集锦
- 四年级数学(四则混合运算带括号)计算题专项练习与答案汇编
- 中国传统服饰文化
- 【课件】Unit+5+Fun+Clubs-+Section+B+(1a-2b)课件人教版(2024)七年级英语上册++
- 回收二手机免责协议书模板
- 20以内的加法口算练习题4000题 210
- 苏轼向南(2023年四川广元中考语文试卷散文阅读题及答案)
- 2024-2030年中国大棚果蔬种植产业经营管理策略与投资前景展望报告
- 2025年日历A4纸打印
- 储能投资方案计划书
- 麦克纳姆轮的设计
- HG∕T 4286-2017 搪玻璃换热管
- 2025中考英语备考专题10 阅读理解之说明文(北京中考真题+名校模拟)
- DL∕T 5362-2018 水工沥青混凝土试验规程
评论
0/150
提交评论