1 / 14
文档名称:

仿射密码.doc

格式:doc   大小:29KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

仿射密码.doc

上传人:文库旗舰店 2019/12/8 文件大小:29 KB

下载得到文件列表

仿射密码.doc

文档介绍

文档介绍:仿射密码o加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是:C=Ek(m)=(k1m+k2)modnM=Dk(c)=k1(c-k2)modno仿射密码具有可逆性的条件是gcd(k,n)=1。当k1=0时,仿射密码变为加法密码,当k2=0时,仿射密码变为乘法密码。o仿射密码中的密钥空间的大小为nφ(n),当n为26字母,φ(n)=12,因此仿射密码的密钥空间为12×26=312。仿射密码举例o设密钥K=(7,3),用仿射密码加密明文hot。o三个字母对应的数值是7、14和19。分别加密如下:(7×7+3)mod26=52mod26=0(7×14+3)mod26=101mod26=23(7×19+3)mod26=136mod26=6o三个密文数值为0、23和6,对应的密文是AXG。移位密码、仿射密码、维吉尼亚密码以及置换密码的源代码:#include<>#include<>#include<>#type>#include<>#include<iostream>usingnamespacestd;voidShift()/*移位密码*/{charc[100];intlength,i=0,key=0;system("cls");printf("********ShiftCipher(移位密码)********\nPleaseinputprimalsentence(请输入最初的明文--一组英文字母):");gets(c);length=strlen(c);printf("Inputthekey(0~26):");scanf("%d",&key);getchar();if(key<0){printf("Thevalueofkeyiserror!\nPressanykeytoreturn...");getch();return;}for(i=0;i<length;i++){if(c[i]>96&&c[i]<123)c[i]=(c[i]+key-97)%26+65;elseif(c[i]>64&&c[i]<91)c[i]=(c[i]+key-65)%26+65;}printf("Resultis:%s\n",c);for(i=0;i<length;i++){if(c[i]>64&&c[i]<91)c[i]=(c[i]-key-65+26)%26+97;}printf("\nAftertranslatedthesentence,wecanseetheprimalsentenceasfollow:\n%s\n",c);printf("Pressanykeytoreturn(按任何键返回)...");getch();}intgcd(inta,intb)/*辗转相除法求a,b的最大公因数*/{intk=0;do{k=a%b;a=b;b=k;}while(k!=0);returna;}intNi(inta,intb)/*求a相对于b的逆*/{inti=0;while(a*(++i)%b!=1);returni;}voidAffine()/*仿射密码*/{charc[100];intlength,i=0,ka=0,kb=0,tmp;system("cls");printf("********AffineCipher(仿射密码)********\nPleaseinputprimalsentence(请输入最初的明文):");gets(c);length=strlen(c);printf("Inputthekey(2numbers):");scanf("%d%d",&ka,&kb);getchar();if(gcd(ka,26)!=1){printf("Thevalueofthekeyiserror!\nPressanykeytoreturn...");return;}for(i=0;i<length;i++){if(c[i]>96&&c[i]<123)c[i]=(ka*(c[i]-97)+kb)%26+65;elseif(c[i]>64&&c[i]<91)c[i]=(ka*(c[i]-65)+kb)%26+65;}printf("Resultis:%s\n",c);for(i=0;i<length;i++){if(c[i]>64&&c[i]<91){tmp=Ni(ka,26)*((c[i]-65)-kb);if(tmp<0)c[i]=tmp%26+26+97;elsec[i]=tmp%26+97;}}printf("\nAftertranslatedthesentence,wecanseetheprimalsentenceasfollow:\n%s\n",c);pr