2023年信息安全与密码学实验报告_第1页
2023年信息安全与密码学实验报告_第2页
2023年信息安全与密码学实验报告_第3页
2023年信息安全与密码学实验报告_第4页
2023年信息安全与密码学实验报告_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《信息安全与密码学》实验报告姓名:学号:学院:班级:成绩:2023年12月31日目录密码体制令。对,任意,定义以及若取,则此密码体制通常叫做凯撒密码(CaesarCipher),由于它一方面为儒勒·凯撒所使用。使用移位密码可以用来加密普通的英文句子,但是一方面必须建立英文字母和模26剩余之间的一一相应关系:如。将其列表如下:ABCDEFGHIJKLM0123456789101112NOPQRSTUVWXYZ13141516171819202122232425usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacemimaxue46.FormsClass{publicpartialclassyiwei:Form{publicyiwei(){InitializeComponent();}privatevoidtextBox1_KeyPress(objectsender,KeyPressEventArgse){}privatevoidbutton1_Click(objectsender,EventArgse){textBox3.Clear();string[]aa=newstring[26];aa[0]="a";aa[1]="b";aa[2]="c";aa[3]="d";aa[4]="e";aa[5]="f";aa[6]="g";aa[7]="h";aa[8]="i";aa[9]="j";aa[10]="k";aa[11]="l";aa[12]="m";aa[13]="n";aa[14]="o";aa[15]="p";aa[16]="q";aa[17]="r";aa[18]="s";aa[19]="t";aa[20]="u";aa[21]="v";aa[22]="w";aa[23]="x";aa[24]="y";aa[25]="z";string[]aa2=newstring[26];aa2[0]="A";aa2[1]="B";aa2[2]="C";aa2[3]="D";aa2[4]="E";aa2[5]="F";aa2[6]="G";aa2[7]="H";aa2[8]="I";aa2[9]="J";aa2[10]="K";aa2[11]="L";aa2[12]="M";aa2[13]="N";aa2[14]="O";aa2[15]="P";aa2[16]="Q";aa2[17]="R";aa2[18]="S";aa2[19]="T";aa2[20]="U";aa2[21]="V";aa2[22]="W";aa2[23]="X";aa2[24]="Y";aa2[25]="Z";try{#regioninta=Convert.ToInt16(textBox1.Text);stringtx=textBox2.Text;intle=tx.Length;int[]bb=newint[le];string[]txt=newstring[le];for(inti=0;i<le;i++){txt[i]=tx[i].ToString();}//获得明文string[]txt2=newstring[le];for(intj=0;j<le;j++){for(intm=0;m<26;m++){if(txt[j]==aa[m]){bb[j]=(m+a)%26;txt2[j]=aa2[bb[j]];}}}//获得密文stringtx2="";for(intn=0;n<le;n++){tx2+=txt2[n];}textBox3.Text=tx2;#endregion}catch{MessageBox.Show("请输入对的格式的秘钥以及明文");}}privatevoidbutton2_Click(objectsender,EventArgse){textBox6.Clear();string[]aa=newstring[26];aa[0]="a";aa[1]="b";aa[2]="c";aa[3]="d";aa[4]="e";aa[5]="f";aa[6]="g";aa[7]="h";aa[8]="i";aa[9]="j";aa[10]="k";aa[11]="l";aa[12]="m";aa[13]="n";aa[14]="o";aa[15]="p";aa[16]="q";aa[17]="r";aa[18]="s";aa[19]="t";aa[20]="u";aa[21]="v";aa[22]="w";aa[23]="x";aa[24]="y";aa[25]="z";string[]aa2=newstring[26];aa2[0]="A";aa2[1]="B";aa2[2]="C";aa2[3]="D";aa2[4]="E";aa2[5]="F";aa2[6]="G";aa2[7]="H";aa2[8]="I";aa2[9]="J";aa2[10]="K";aa2[11]="L";aa2[12]="M";aa2[13]="N";aa2[14]="O";aa2[15]="P";aa2[16]="Q";aa2[17]="R";aa2[18]="S";aa2[19]="T";aa2[20]="U";aa2[21]="V";aa2[22]="W";aa2[23]="X";aa2[24]="Y";aa2[25]="Z";try{inta=Convert.ToInt16(textBox4.Text);stringtx=textBox5.Text;intle=tx.Length;string[]txt=newstring[le];for(inti=0;i<le;i++){txt[i]=tx[i].ToString();}//获得密文string[]txt2=newstring[le];for(intj=0;j<le;j++){for(intm=0;m<26;m++){if(txt[j]==aa2[m]){intn=m-a;if(n<=0){n=n+26;txt2[j]=aa[n%26];}else{txt2[j]=aa[n%26];}}}}stringtx2="";for(intn=0;n<le;n++){tx2+=txt2[n];}textBox6.Text=tx2;}catch{MessageBox.Show("请输入对的的秘钥以及密文");}}}}在置换密码的情形下,我们也可以认为和是26个英文字母。在移位密码中使用是由于加密和解密都是代数运算。但是在置换密码的情形下,可更简朴的将加密和解密过程直接看作是一个字母表上的置换。任取一置换,便可得到一加密函数,见下表(小写字母表达明文,大写字母表达密文):abcdefghijklmXNYAHPOGZQWBTnopqrstuvwxyzSFLRCVMUEKJDI按照上表应有,,等等。解密函数是相应的逆置换。由下表给出:ABCDEFGHIJKLMdlryvohEzxwptNOPQRSTUVWXYZbgfjqnmUskaci因此,,,等等。置换密码的一个密钥刚好相应于26个英文字母的一种置换。所有也许的置换有26!种,这个数值超过,是一个很大的数。因此,采用穷尽密钥搜索的袭击方法,即使使用计算机,也是计算上不可行的。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacemimaxue46.FormsClass{publicpartialclasszhihuan:Form{publiczhihuan(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){textBox2.Clear();string[]aa=newstring[26];aa[0]="a";aa[1]="b";aa[2]="c";aa[3]="d";aa[4]="e";aa[5]="f";aa[6]="g";aa[7]="h";aa[8]="i";aa[9]="j";aa[10]="k";aa[11]="l";aa[12]="m";aa[13]="n";aa[14]="0";aa[15]="p";aa[16]="q";aa[17]="r";aa[18]="s";aa[19]="t";aa[20]="u";aa[21]="v";aa[22]="w";aa[23]="x";aa[24]="y";aa[25]="z";string[]bb=newstring[26];bb[0]="X";bb[1]="N";bb[2]="Y";bb[3]="A";bb[4]="H";bb[5]="P";bb[6]="O";bb[7]="G";bb[8]="Z";bb[9]="Q";bb[10]="W";bb[11]="B";bb[12]="T";bb[13]="S";bb[14]="F";bb[15]="L";bb[16]="R";bb[17]="C";bb[18]="V";bb[19]="M";bb[20]="U";bb[21]="E";bb[22]="K";bb[23]="J";bb[24]="D";bb[25]="I";//设立密码加密表stringtx=textBox1.Text;intle=tx.Length;string[]txt=newstring[le];for(intm=0;m<le;m++){txt[m]=tx[m].ToString();}//明文string[]txt2=newstring[le];for(inti=0;i<le;i++){for(intj=0;j<26;j++){if(txt[i]==aa[j]){txt2[i]=bb[j];}}}//密文stringtx2="";for(inti=0;i<txt2.Length;i++){tx2+=txt2[i];}this.textBox2.Text=tx2;}//还可以使用listprivatevoidtextBox1_TextChanged(objectsender,EventArgse){}privatevoidtextBox2_TextChanged(objectsender,EventArgse){}privatevoidbutton2_Click(objectsender,EventArgse){string[]aa=newstring[26];aa[0]="a";aa[1]="b";aa[2]="c";aa[3]="d";aa[4]="e";aa[5]="f";aa[6]="g";aa[7]="h";aa[8]="i";aa[9]="j";aa[10]="k";aa[11]="l";aa[12]="m";aa[13]="n";aa[14]="0";aa[15]="p";aa[16]="q";aa[17]="r";aa[18]="s";aa[19]="t";aa[20]="u";aa[21]="v";aa[22]="w";aa[23]="x";aa[24]="y";aa[25]="z";string[]bb=newstring[26];bb[0]="X";bb[1]="N";bb[2]="Y";bb[3]="A";bb[4]="H";bb[5]="P";bb[6]="O";bb[7]="G";bb[8]="Z";bb[9]="Q";bb[10]="W";bb[11]="B";bb[12]="T";bb[13]="S";bb[14]="F";bb[15]="L";bb[16]="R";bb[17]="C";bb[18]="V";bb[19]="M";bb[20]="U";bb[21]="E";bb[22]="K";bb[23]="J";bb[24]="D";bb[25]="I";stringtx=textBox3.Text;intle=tx.Length;string[]txt=newstring[le];for(inti=0;i<le;i++){txt[i]=tx[i].ToString();}//密文string[]txt2=newstring[le];for(intj=0;j<le;j++){for(intm=0;m<26;m++){if(txt[j]==bb[m]){txt2[j]=aa[m];}}}//获得明文stringtx2="";for(intn=0;n<le;n++){tx2+=txt2[n];}textBox4.Text=tx2;}}}密码体制设是一个正整数。定义。对任意的密钥,定义:和以上所有的运算都是在上进行。使用前面所述的方法,相应,则每个密钥相称于一个长度为的字母串,称为密钥字。维吉尼亚密码一次加密个明文字母。例假设,密钥字为CIPHER,其相应于如下的数字串K=(2,8,15,7,4,17)。要加密的明文为:thiscryptosystemisnotsecure将明文串转化为相应的数字,每六个为一组,使用密钥字进行模26下的加密运算如下所示:19781821724151914182418192815741728157417282115232568023821221520141281813141918422017415741728157417281519191291522825819222519则相应的密文应当为:VPXZGIAXIVWPUBTTMJPWIZITWZT解密时,使用相同的密钥字,进行逆运算即可。维吉尼亚密码的密钥空间大小为,所以即使的值很小,使用穷尽密钥搜索方法也需要很长的时间。例如,当时,密钥空间大小超过,这样的密钥量已经超过了使用手算进行穷尽搜索的能力范围(当然使用计算机另当别论)。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacemimaxue46.FormsClass{publicpartialclassweijiniya:Form{publicweijiniya(){InitializeComponent();}privatevoidweijiniya_Load(objectsender,EventArgse){}privatevoidbutton1_Click(objectsender,EventArgse){}privatevoidbutton1_Click_1(objectsender,EventArgse){#regiontextBox3.Clear();string[]aa=newstring[26];aa[0]="a";aa[1]="b";aa[2]="c";aa[3]="d";aa[4]="e";aa[5]="f";aa[6]="g";aa[7]="h";aa[8]="i";aa[9]="j";aa[10]="k";aa[11]="l";aa[12]="m";aa[13]="n";aa[14]="o";aa[15]="p";aa[16]="q";aa[17]="r";aa[18]="s";aa[19]="t";aa[20]="u";aa[21]="v";aa[22]="w";aa[23]="x";aa[24]="y";aa[25]="z";string[]bb=newstring[26];bb[0]="A";bb[1]="B";bb[2]="C";bb[3]="D";bb[4]="E";bb[5]="F";bb[6]="G";bb[7]="H";bb[8]="I";bb[9]="J";bb[10]="K";bb[11]="L";bb[12]="M";bb[13]="N";bb[14]="O";bb[15]="P";bb[16]="Q";bb[17]="R";bb[18]="S";bb[19]="T";bb[20]="U";bb[21]="V";bb[22]="W";bb[23]="X";bb[24]="Y";bb[25]="Z";#endregiontry{#region秘钥stringtx=textBox1.Text;intle=tx.Length;string[]txt=newstring[le];int[]txt2=newint[le];for(inti=0;i<le;i++){txt[i]=tx[i].ToString();}for(inti=0;i<le;i++){for(intj=0;j<26;j++){if(txt[i]==bb[j]){txt2[i]=j;}}}#endregion#region明文stringtx2=textBox2.Text;intle2=tx2.Length;string[]txt3=newstring[le2];int[]txt4=newint[le2];for(inti=0;i<le2;i++){txt3[i]=tx2[i].ToString();}for(inti=0;i<le2;i++){for(intj=0;j<26;j++){if(txt3[i]==aa[j]){txt4[i]=j;}}}#endregion#region加密int[]txt5=newint[le2];intm=le2/le;//得到明文的整数组的个数for(inti=0;i<(m+1);i++){for(intj=0;j<le;j++){if((j+i*le)<le2){txt5[j+i*le]=(txt4[j+i*le]+txt2[j])%26;}}}#endregion#region密文显示string[]txt6=newstring[le2];for(inti=0;i<le2;i++){txt6[i]=bb[txt5[i]];}stringtx7="";for(inti=0;i<le2;i++){tx7+=txt6[i];}textBox3.Text=tx7;#endregion}catch{MessageBox.Show("请输入对的的秘钥及明文");}}privatevoidbutton2_Click(objectsender,EventArgse){#regiontextBox6.Clear();string[]aa=newstring[26];aa[0]="a";aa[1]="b";aa[2]="c";aa[3]="d";aa[4]="e";aa[5]="f";aa[6]="g";aa[7]="h";aa[8]="i";aa[9]="j";aa[10]="k";aa[11]="l";aa[12]="m";aa[13]="n";aa[14]="o";aa[15]="p";aa[16]="q";aa[17]="r";aa[18]="s";aa[19]="t";aa[20]="u";aa[21]="v";aa[22]="w";aa[23]="x";aa[24]="y";aa[25]="z";string[]bb=newstring[26];bb[0]="A";bb[1]="B";bb[2]="C";bb[3]="D";bb[4]="E";bb[5]="F";bb[6]="G";bb[7]="H";bb[8]="I";bb[9]="J";bb[10]="K";bb[11]="L";bb[12]="M";bb[13]="N";bb[14]="O";bb[15]="P";bb[16]="Q";bb[17]="R";bb[18]="S";bb[19]="T";bb[20]="U";bb[21]="V";bb[22]="W";bb[23]="X";bb[24]="Y";bb[25]="Z";#endregiontry{#region秘钥stringtx=textBox4.Text;intle=tx.Length;string[]txt=newstring[le];int[]txt2=newint[le];for(inti=0;i<le;i++){txt[i]=tx[i].ToString();}for(inti=0;i<le;i++){for(intj=0;j<26;j++){if(txt[i]==bb[j]){txt2[i]=j;}}}#endregion#region密文stringtx2=textBox5.Text;intle2=tx2.Length;string[]txt3=newstring[le2];int[]txt4=newint[le2];for(inti=0;i<le2;i++){txt3[i]=tx2[i].ToString();}for(inti=0;i<le2;i++){for(intj=0;j<26;j++){if(txt3[i]==bb[j]){txt4[i]=j;}}}#endregion#region解密int[]txt5=newint[le2];intm=le2/le;//得到密文的整数组的个数for(inti=0;i<(m+1);i++){for(intj=0;j<le;j++){if((j+i*le)<le2){intn=(txt4[j+i*le]-txt2[j])%26;if(n<0){txt5[j+i*le]=(n+26)%26;}else{txt5[j+i*le]=n%26;}}}}#endregion#region明文显示string[]txt6=newstring[le2];for(inti=0;i<le2;i++){txt6[i]=aa[txt5[i]];}stringtx7="";for(inti=0;i<le2;i++){tx7+=txt6[i];}textBox6.Text=tx7;#endregion}catch{MessageBox.Show("请输入对的格式的秘钥及密文");}}}}设为正整数,是三个整数,假如整数满足,则设反复运用,可以得到直到则等于最大的非零余数例如usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacemimaxue46.FormsClass{publicpartialclassEliud:Form{publicEliud(){InitializeComponent();}privatevoidtextBox1_TextChanged(objectsender,EventArgse){}privatevoideulid(TextBoxtextbox1,TextBoxtextbox2){inta,b,r;r=1;try{a=Convert.ToInt16(textBox1.Text);b=Convert.ToInt16(textBox2.Text);while(r!=0){r=a%b;a=b;b=r;}textBox3.Text=Convert.ToString(a);}catch{MessageBox.Show("请对的输入数字");}}privatevoidbutton1_Click(objectsender,EventArgse){//r=a/b;这是求解整数商部分eulid(textBox1,textBox2);}}}假如整数和不都为0,那么存在整数和满足假如,则在模下有乘法逆元,即存在一个满足用扩展欧几里得算法先求出,当时,则返回的值就是的乘法逆元。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacemimaxue46.FormsClass{publicpartialclassExtendEliud:Form{publicExtendEliud(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){try{inta=Convert.ToInt32(textBox1.Text);intb=Convert.ToInt32(textBox2.Text);intx=1;inty=0;ints=1;intr=0;intg=a;intt=b;intq,u,v,w;if(a>=b&&b>0){while(t>0){q=g/t;u=x-q*r;v=y-q*s;w=g-q*t;x=r;y=s;g=t;r=u;s=v;t=w;}textBox3.Text=Convert.ToString(g);textBox4.Text=Convert.ToString(x);textBox5.Text=Convert.ToString(y);}else{MessageBox.Show("请保证a>=b>0");}}catch{MessageBox.Show("请输入对的格式的数字");}}}}素数的定义,当一个数只能被1和自身整除时,这个数是素数。古希腊数学家Eratosthenes(公元前276~公元前195)发现了一种找出不超过一个给定正整数的所有素数的方法,称为Eratosthenes筛法(Sieve

of

Eratosthenes)。所谓筛法就是将不合条件的整数筛掉,而将符合条件的整数“捉住”。Eratosthenes筛法筛选由大于1并且小于或等于n的所有自然数组成的数列。一方面取第一个素数2,划去所有除2以外的2的倍数。在余下的正整数中,大于刚刚取到的素数2的第一个正整数,即正整数3被认定为素数,其倍数(不涉及自身)同样从数列中划去。这一过程连续到找到一个大于nn的素数为止usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacemimaxue46.FormsClass{publicpartialclassSuxingjianYan:Form{publicSuxingjianYan(){InitializeComponent();}privatevoideulid(intn,inta){intr;r=1;a=n/2;while(r!=0){r=n%a;n=a;a=r;}}privatevoidbutton1_Click(objectsender,EventArgse){#regioninta=Convert.ToInt32(textBox1.Text);if(a==1||a==2){label2.Text="是素数";}for(inti=2;i<a;i++){if(a%i==0){label2.Text="不是素数";break;}else{label2.Text="是素数";}}#endregion}}}DES(DataEncryptionStandard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。DES算法以被应用于许多需要安全加密的场合。(如:UNIX的密码算法就是以DES算法为基础的)。下面是关于如何实现DES算法的语言性描述:注1:下面出现了很多对“位数字序列”进行重新排序的表,表中的数字相应变换前的序列中的位置,把原序列中那个位置的位数字放到表中的数字所在的位置即可得到新的位数字序列。注2:S[1]–S[8]中的数据取值范围是0–15,代表4位二进制数据。1计算子密钥1-1变换密钥取得64位的密钥,从左向右,每个字节的第8位作为奇偶校验位,校验位也许是为了使得密钥更严格,但实际对数据进行加密时,这个奇偶位是要舍弃的,并不参与运算,所以在使用DES加解密时,只要进行密文通信的双方协商好,可不必关注这点。1-2变换密钥1-2-1根据下表(PC-1)对64位密钥进行变换得到56位的序列,由表中可以看出,在变换中,舍弃了原始64位密钥中的奇偶校验位,即舍去了原始64位密钥中的第8、16、24、32、40、48、56、64等八个位。PermutedChoice1(PC-1)574941332517915850423426181025951433527191136052443663554739312315762544638302214661534537292113528201241-2-2将变换后的序列分为两个部分,开始的28位称为C[0],最后的28位称为D[0]。1-2-3生成16个子密钥(每个子密钥均为48位的数字序列),初始I=1。1-2-3-1同时将C[I]、D[I]左移1位或2位,根据I值决定循环左移的位数。见下表1-2-3-2、将C[I]D[I]作为一个整体按下表(PC-2)变换,得到48位的K[I]PermutedChoice2(PC-2)14171124153281562110231912426816727201324152313747553040514533484449395634534642503629321-2-3-3从1-2-3-1处循环执行,直到K[16]被计算完毕。小结:以上过程得出16个子密钥K[1]–K[16],对数据进行加解密时,实际参与运算的就是这16个子密钥。在加密时,子密钥的调用顺序为K[1]–K[16];在解密时,子密钥的调用顺序为K[16]–K[1]。2解决64位的数据【加密】2-1取得64位的数据序列,假如数据序列长度局限性64位,应当将其扩展为64位(这点必须要做,并且最佳让通信双方在事先约定好规则,两者使用同样的规则,例如补零等)2-2将64位数据序列按下表变换(IP)InitialPermutation(IP)585042342618102605244362820124625446383022146645648403224168574941332517915951433527191136153453729211356355473931231572-3将变换后的数据分为两部分,开始的32位称为L[0],最后的32位称为R[0]。2-4用16个子密钥加密数据,初始I=1。2-4-1将32位的R[I-1]按下表(E)扩展为48位的E[I-1]Expansion(E)32123454567898910111213121314151617161718192021202122232425242526272829282930313212-4-2异或E[I-1]和K[I],即E[I-1]XORK[I]2-4-3将异或后的结果分为8个6位长的部分,第1位到第6位称为B[1],第7位到第12位称为B[2],依此类推,第43位到第48位称为B[8]。2-4-4按S表变换所有的B[J],初始J=1。所有在S表的值都被当作4位二进制数解决。2-4-4-1将B[J]的第1位和第6位组合为一个2位长度的变量M,M作为在S[J]中的行号。2-4-4-2将B[J]的第2位到第5位组合,作为一个4位长度的变量N,N作为在S[J]中的列号。2-4-4-3用S[J][M][N]来取代B[J],B[J]由本来的6位数,变成了值为S[J][M][N]的4位数。SubstitutionBox1(S[1])1441312151183106125907015741421311061211953841148136211151297310501512824917511314100613S[2]1518146113497213120510313471528141201106911501471110413158126932151381013154211671205149S[3]1009146315511312711428137093461028514121115113649815301112125101471101306987415143115212S[4]7131430691012851112415138115615034721211014910690121171315131452843150610113894511127214S[5]2124171011685315130149141121247131501510398642111101378159125630141181271142136150910453S[6]1211015926801334147511101542712956113140113891415528123704101131164321295151011141760813S[7]4112141508133129751061130117491101435122158614111312371410156805926111381410795015142312S[8]13284615111109314501271151381037412561101492711419121420610131535821147410813151290356112-4-4-4、从2-4-4-1处循环执行,直到B[8]被替代完毕。2-4-4-5、将全新的B[1]到B[8]按顺序组合成32位数字序列,按下表(P)变换,得到P。PermutationP16720212912281711523265183110282414322739191330622114252-4-6异或P和L[I-1],结果放在R[I],即R[I]=PXORL[I-1]。2-4-7把R[I-1]传给L[I],L[I]=R[I-1]。2-4-8从2-4-1处开始循环执行,共有16次,即直到K[16]被变换完毕,得到R[16]和L[16]。2-4-5把组合变换后的R[16]和L[16],按照R[16]在左、L[16]在右的顺序组合成64位数字序列,再按下表(IP-1)变换得到最后的结果。FinalPermutation(IP**-1)40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725小结:以上,完毕了对64位数字序列的一次DES加密,假如被加密数据的长度大于64位,若长度为64的整数倍,则无需补数据,若长度不为64的整数倍,则需先补齐使之为64的整数倍,然后按照64位对待加密数据进行分段,每64位为一段,分别用以上算法对每段数据进行加密,之后各段再按先前顺序组合在一起,即可得到这串数据的密文。3解决64位的数据【解密】3-1解密与加密的整体流程完全同样;3-2不同点在于,加密中的“2-4-2、异或E[I-1]和K[I],即E[I-1]XORK[I]”,到解密时需要变成“异或E[I-1]和K[17-I],即E[I-1]XORK[17-I]”;小结:根据以上第二步对加密流程做一点点调整之后,就是解密的过程。被解密数据的长度必须为64位的整数倍,否则不能进行解密;假如数据的长度大于64位,按照64位对待解密数据进行分段,每64位为一段,分别用以上算法对每段数据进行解密,之后各段再按先前顺序组合在一起,即可得到这串数据的明文。4、单DES与常见的三DES4-1单DES数据规定:密钥为64位,数据长度为64位的整数倍。加密与解密环节:解决同一串64位数据时,加密或者解密都是执行一次。4-2常见的三DES数据规定:密钥为128(KEY1+KEY2)位,数据长度为64位的整数倍。加密与解密环节:解决同一串64位数据(设为A)时,加密或者解密都要执行三次单DES,具体如下:加密:A加密(KEY1)得到BàB解密(KEY2)得到CàC加密(KEY1)得到D解密:D解密(KEY1)得到EàE加密(KEY2)得到FàF解密(KEY1)得到AusingSystem;usingSystem.Collections.Generic;usingSystem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论