2023年信息安全與密碼學(xué)實(shí)驗(yàn)報(bào)告_第1頁
2023年信息安全與密碼學(xué)實(shí)驗(yàn)報(bào)告_第2頁
2023年信息安全與密碼學(xué)實(shí)驗(yàn)報(bào)告_第3頁
2023年信息安全與密碼學(xué)實(shí)驗(yàn)報(bào)告_第4頁
2023年信息安全與密碼學(xué)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

《信息安全與密碼學(xué)》實(shí)驗(yàn)報(bào)告姓名:學(xué)號:學(xué)院:班級:成績:2023年12月31日目錄密碼體制令。對,任意,定義以及若取,則此密碼體制通常叫做凱撒密碼(CaesarCipher),由于它一方面為儒勒·凱撒所使用。使用移位密碼可以用來加密普通的英文句子,但是一方面必須建立英文字母和模26剩余之間的一一相應(yīng)關(guān)系:如。將其列表如下: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("請輸入對的的秘鑰以及密文");}}}}在置換密碼的情形下,我們也可以認(rèn)為和是26個(gè)英文字母。在移位密碼中使用是由于加密和解密都是代數(shù)運(yùn)算。但是在置換密碼的情形下,可更簡樸的將加密和解密過程直接看作是一個(gè)字母表上的置換。任取一置換,便可得到一加密函數(shù),見下表(小寫字母表達(dá)明文,大寫字母表達(dá)密文):abcdefghijklmXNYAHPOGZQWBTnopqrstuvwxyzSFLRCVMUEKJDI按照上表應(yīng)有,,等等。解密函數(shù)是相應(yīng)的逆置換。由下表給出:ABCDEFGHIJKLMdlryvohEzxwptNOPQRSTUVWXYZbgfjqnmUskaci因此,,,等等。置換密碼的一個(gè)密鑰剛好相應(yīng)于26個(gè)英文字母的一種置換。所有也許的置換有26!種,這個(gè)數(shù)值超過,是一個(gè)很大的數(shù)。因此,采用窮盡密鑰搜索的襲擊方法,即使使用計(jì)算機(jī),也是計(jì)算上不可行的。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";//設(shè)立密碼加密表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;}}}密碼體制設(shè)是一個(gè)正整數(shù)。定義。對任意的密鑰,定義:和以上所有的運(yùn)算都是在上進(jìn)行。使用前面所述的方法,相應(yīng),則每個(gè)密鑰相稱于一個(gè)長度為的字母串,稱為密鑰字。維吉尼亞密碼一次加密個(gè)明文字母。例假設(shè),密鑰字為CIPHER,其相應(yīng)于如下的數(shù)字串K=(2,8,15,7,4,17)。要加密的明文為:thiscryptosystemisnotsecure將明文串轉(zhuǎn)化為相應(yīng)的數(shù)字,每六個(gè)為一組,使用密鑰字進(jìn)行模26下的加密運(yùn)算如下所示:19781821724151914182418192815741728157417282115232568023821221520141281813141918422017415741728157417281519191291522825819222519則相應(yīng)的密文應(yīng)當(dāng)為:VPXZGIAXIVWPUBTTMJPWIZITWZT解密時(shí),使用相同的密鑰字,進(jìn)行逆運(yùn)算即可。維吉尼亞密碼的密鑰空間大小為,所以即使的值很小,使用窮盡密鑰搜索方法也需要很長的時(shí)間。例如,當(dāng)時(shí),密鑰空間大小超過,這樣的密鑰量已經(jīng)超過了使用手算進(jìn)行窮盡搜索的能力范圍(當(dāng)然使用計(jì)算機(jī)另當(dāng)別論)。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;//得到明文的整數(shù)組的個(gè)數(shù)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;//得到密文的整數(shù)組的個(gè)數(shù)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("請輸入對的格式的秘鑰及密文");}}}}設(shè)為正整數(shù),是三個(gè)整數(shù),假如整數(shù)滿足,則設(shè)反復(fù)運(yùn)用,可以得到直到則等于最大的非零余數(shù)例如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("請對的輸入數(shù)字");}}privatevoidbutton1_Click(objectsender,EventArgse){//r=a/b;這是求解整數(shù)商部分eulid(textBox1,textBox2);}}}假如整數(shù)和不都為0,那么存在整數(shù)和滿足假如,則在模下有乘法逆元,即存在一個(gè)滿足用擴(kuò)展歐幾里得算法先求出,當(dāng)時(shí),則返回的值就是的乘法逆元。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("請輸入對的格式的數(shù)字");}}}}素?cái)?shù)的定義,當(dāng)一個(gè)數(shù)只能被1和自身整除時(shí),這個(gè)數(shù)是素?cái)?shù)。古希臘數(shù)學(xué)家Eratosthenes(公元前276~公元前195)發(fā)現(xiàn)了一種找出不超過一個(gè)給定正整數(shù)的所有素?cái)?shù)的方法,稱為Eratosthenes篩法(Sieve

of

Eratosthenes)。所謂篩法就是將不合條件的整數(shù)篩掉,而將符合條件的整數(shù)“捉住”。Eratosthenes篩法篩選由大于1并且小于或等于n的所有自然數(shù)組成的數(shù)列。一方面取第一個(gè)素?cái)?shù)2,劃去所有除2以外的2的倍數(shù)。在余下的正整數(shù)中,大于剛剛?cè)〉降乃財(cái)?shù)2的第一個(gè)正整數(shù),即正整數(shù)3被認(rèn)定為素?cái)?shù),其倍數(shù)(不涉及自身)同樣從數(shù)列中劃去。這一過程連續(xù)到找到一個(gè)大于nn的素?cái)?shù)為止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="是素?cái)?shù)";}for(inti=2;i<a;i++){if(a%i==0){label2.Text="不是素?cái)?shù)";break;}else{label2.Text="是素?cái)?shù)";}}#endregion}}}DES(DataEncryptionStandard)算法,于1977年得到美國政府的正式許可,是一種用56位密鑰來加密64位數(shù)據(jù)的方法。DES算法以被應(yīng)用于許多需要安全加密的場合。(如:UNIX的密碼算法就是以DES算法為基礎(chǔ)的)。下面是關(guān)于如何實(shí)現(xiàn)DES算法的語言性描述:注1:下面出現(xiàn)了很多對“位數(shù)字序列”進(jìn)行重新排序的表,表中的數(shù)字相應(yīng)變換前的序列中的位置,把原序列中那個(gè)位置的位數(shù)字放到表中的數(shù)字所在的位置即可得到新的位數(shù)字序列。注2:S[1]–S[8]中的數(shù)據(jù)取值范圍是0–15,代表4位二進(jìn)制數(shù)據(jù)。1計(jì)算子密鑰1-1變換密鑰取得64位的密鑰,從左向右,每個(gè)字節(jié)的第8位作為奇偶校驗(yàn)位,校驗(yàn)位也許是為了使得密鑰更嚴(yán)格,但實(shí)際對數(shù)據(jù)進(jìn)行加密時(shí),這個(gè)奇偶位是要舍棄的,并不參與運(yùn)算,所以在使用DES加解密時(shí),只要進(jìn)行密文通信的雙方協(xié)商好,可不必關(guān)注這點(diǎn)。1-2變換密鑰1-2-1根據(jù)下表(PC-1)對64位密鑰進(jìn)行變換得到56位的序列,由表中可以看出,在變換中,舍棄了原始64位密鑰中的奇偶校驗(yàn)位,即舍去了原始64位密鑰中的第8、16、24、32、40、48、56、64等八個(gè)位。PermutedChoice1(PC-1)574941332517915850423426181025951433527191136052443663554739312315762544638302214661534537292113528201241-2-2將變換后的序列分為兩個(gè)部分,開始的28位稱為C[0],最后的28位稱為D[0]。1-2-3生成16個(gè)子密鑰(每個(gè)子密鑰均為48位的數(shù)字序列),初始I=1。1-2-3-1同時(shí)將C[I]、D[I]左移1位或2位,根據(jù)I值決定循環(huán)左移的位數(shù)。見下表1-2-3-2、將C[I]D[I]作為一個(gè)整體按下表(PC-2)變換,得到48位的K[I]PermutedChoice2(PC-2)14171124153281562110231912426816727201324152313747553040514533484449395634534642503629321-2-3-3從1-2-3-1處循環(huán)執(zhí)行,直到K[16]被計(jì)算完畢。小結(jié):以上過程得出16個(gè)子密鑰K[1]–K[16],對數(shù)據(jù)進(jìn)行加解密時(shí),實(shí)際參與運(yùn)算的就是這16個(gè)子密鑰。在加密時(shí),子密鑰的調(diào)用順序?yàn)镵[1]–K[16];在解密時(shí),子密鑰的調(diào)用順序?yàn)镵[16]–K[1]。2解決64位的數(shù)據(jù)【加密】2-1取得64位的數(shù)據(jù)序列,假如數(shù)據(jù)序列長度局限性64位,應(yīng)當(dāng)將其擴(kuò)展為64位(這點(diǎn)必須要做,并且最佳讓通信雙方在事先約定好規(guī)則,兩者使用同樣的規(guī)則,例如補(bǔ)零等)2-2將64位數(shù)據(jù)序列按下表變換(IP)InitialPermutation(IP)585042342618102605244362820124625446383022146645648403224168574941332517915951433527191136153453729211356355473931231572-3將變換后的數(shù)據(jù)分為兩部分,開始的32位稱為L[0],最后的32位稱為R[0]。2-4用16個(gè)子密鑰加密數(shù)據(jù),初始I=1。2-4-1將32位的R[I-1]按下表(E)擴(kuò)展為48位的E[I-1]Expansion(E)32123454567898910111213121314151617161718192021202122232425242526272829282930313212-4-2異或E[I-1]和K[I],即E[I-1]XORK[I]2-4-3將異或后的結(jié)果分為8個(gè)6位長的部分,第1位到第6位稱為B[1],第7位到第12位稱為B[2],依此類推,第43位到第48位稱為B[8]。2-4-4按S表變換所有的B[J],初始J=1。所有在S表的值都被當(dāng)作4位二進(jìn)制數(shù)解決。2-4-4-1將B[J]的第1位和第6位組合為一個(gè)2位長度的變量M,M作為在S[J]中的行號。2-4-4-2將B[J]的第2位到第5位組合,作為一個(gè)4位長度的變量N,N作為在S[J]中的列號。2-4-4-3用S[J][M][N]來取代B[J],B[J]由本來的6位數(shù),變成了值為S[J][M][N]的4位數(shù)。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處循環(huán)執(zhí)行,直到B[8]被替代完畢。2-4-4-5、將全新的B[1]到B[8]按順序組合成32位數(shù)字序列,按下表(P)變換,得到P。PermutationP16720212912281711523265183110282414322739191330622114252-4-6異或P和L[I-1],結(jié)果放在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處開始循環(huán)執(zhí)行,共有16次,即直到K[16]被變換完畢,得到R[16]和L[16]。2-4-5把組合變換后的R[16]和L[16],按照R[16]在左、L[16]在右的順序組合成64位數(shù)字序列,再按下表(IP-1)變換得到最后的結(jié)果。FinalPermutation(IP**-1)40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725小結(jié):以上,完畢了對64位數(shù)字序列的一次DES加密,假如被加密數(shù)據(jù)的長度大于64位,若長度為64的整數(shù)倍,則無需補(bǔ)數(shù)據(jù),若長度不為64的整數(shù)倍,則需先補(bǔ)齊使之為64的整數(shù)倍,然后按照64位對待加密數(shù)據(jù)進(jìn)行分段,每64位為一段,分別用以上算法對每段數(shù)據(jù)進(jìn)行加密,之后各段再按先前順序組合在一起,即可得到這串?dāng)?shù)據(jù)的密文。3解決64位的數(shù)據(jù)【解密】3-1解密與加密的整體流程完全同樣;3-2不同點(diǎn)在于,加密中的“2-4-2、異或E[I-1]和K[I],即E[I-1]XORK[I]”,到解密時(shí)需要變成“異或E[I-1]和K[17-I],即E[I-1]XORK[17-I]”;小結(jié):根據(jù)以上第二步對加密流程做一點(diǎn)點(diǎn)調(diào)整之后,就是解密的過程。被解密數(shù)據(jù)的長度必須為64位的整數(shù)倍,否則不能進(jìn)行解密;假如數(shù)據(jù)的長度大于64位,按照64位對待解密數(shù)據(jù)進(jìn)行分段,每64位為一段,分別用以上算法對每段數(shù)據(jù)進(jìn)行解密,之后各段再按先前順序組合在一起,即可得到這串?dāng)?shù)據(jù)的明文。4、單DES與常見的三DES4-1單DES數(shù)據(jù)規(guī)定:密鑰為64位,數(shù)據(jù)長度為64位的整數(shù)倍。加密與解密環(huán)節(jié):解決同一串64位數(shù)據(jù)時(shí),加密或者解密都是執(zhí)行一次。4-2常見的三DES數(shù)據(jù)規(guī)定:密鑰為128(KEY1+KEY2)位,數(shù)據(jù)長度為64位的整數(shù)倍。加密與解密環(huán)節(jié):解決同一串64位數(shù)據(jù)(設(shè)為A)時(shí),加密或者解密都要執(zhí)行三次單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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論