首页 密码学课程设计

密码学课程设计

举报
开通vip

密码学课程设计中国矿业大学计算机学院13级本科生课程报告课程名称密码学课程设计报告时间2016.1学生姓名邱翔宇学号08133609班级信息安全13-3任课教师李昕实验一:放射密码实验目的学习仿射密码的具体工作原理,理解仿射密码的计算过程,并根据所知的知识进行放射密码的编程,编写出其加密和解密函数。运行程序进行实践。实验内容加法密码和乘法密码结合构成仿射密码,仿射密码的加密和解密算法分别是:C=Ek(m)=(k1m+k2)modnM=Dk(c)=k3(c-k2)modn(其中(k3×k1)mod26=1)仿射密码具有可逆性的条件...

密码学课程设计
中国矿业大学计算机学院13级本科生课程 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 课程名称密码学课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 报告时间2016.1学生姓名邱翔宇学号08133609班级信息安全13-3任课教师李昕实验一:放射密码实验目的学习仿射密码的具体工作原理,理解仿射密码的计算过程,并根据所知的知识进行放射密码的编程,编写出其加密和解密函数。运行程序进行实践。实验内容加法密码和乘法密码结合构成仿射密码,仿射密码的加密和解密算法分别是:C=Ek(m)=(k1m+k2)modnM=Dk(c)=k3(c-k2)modn(其中(k3×k1)mod26=1)仿射密码具有可逆性的条件是gcd(k1,n)=1。当k1=1时,仿射密码变为加法密码,当k2=0时,仿射密码变为乘法密码。仿射密码中的密钥空间的大小为nφ(n),当n为26字母,φ(n)=12,因此仿射密码的密钥空间为12×26=312。代码:#include#includeusingnamespacestd;charv[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};charl[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};intNumber(charx){for(inti=0;i<26;i++){if(x==l[i]){return(i+1);}}}voidJiaMi(stringm){//加密intk1,k2;cout<<"请输入明文:";cin>>m;cout<<"请输入k1:";cin>>k1;cout<<"请输入k2:";cin>>k2;intc1,c2;intmlen;mlen=m.length();char*p,*q;p=newchar[m.length()+1];strcpy(p,m.c_str());q=newchar[m.length()];inttmp;for(inti=0;i>m;cout<<"请输入k1:";cin>>k1;cout<<"请输入k2:";cin>>k2;intc1,c2;intj,tmp;char*p,*q;p=newchar[m.length()+1];strcpy(p,m.c_str());q=newchar[m.length()];for(inti=0;i 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 步骤,并根据所知的知识进行线性反馈移位寄存器的编程,能够编写出其加密和解密函数。并且运行程序成功。实验内容代码#includeusingnamespacestd;voidyiwei(booly[8])//移位函数{boolx=y[7]^y[5]^y[4]^y[0];for(inti=0;i<7;i++)y[i]=y[i+1];y[7]=x;cout< 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 的换位。57,49,41,33,25,17,  9, 1,58,50,42,34,26,18,10, 2,59,51,43,35,27,19,11, 3,60,52,44,36,63,55,47,39,31,23,15, 7,62,54,46,38,30,22,14, 6,61,53,45,37,29,21,13, 5,28,20,12,  4,表的意思是第57位移到第1位,第49位移到第2位,......以此类推。变换后得到56bit数据,将它分成两部分,C[0][28],D[0][28]。2.计算16个子密钥,计算方法C[i][28]D[i][28]为对前一个C[i-1][28],D[i-1][28]做循环左移操作。16次的左移位数如下表: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16  (第i次) 1, 1, 2, 2, 2, 2, 2, 2, 1,  2, 2,  2,  2,  2,  2, 1   (左移位数)3.串联计算出来的C[i][28]D[i][28]得到56位,然后对它进行如下变换得到48位子密钥K[i][48]14,17, 11,24, 1,  5,  3,28,15,  6,21,10,23,19,12,  4,26,   8,16,  7,27,20,13,  2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32,表的意思是第14位移到第1位,第17位移到第2位,以此类推。在此过程中,发现第9,18,22,25,35,38,43,54位丢弃。4.对64bit的明文输入进行换位变换。换位表如下:58,50,12,34,26,18,10, 2,60,52,44,36,28,20,12, 4,62,54,46,38,30,22,14, 6,64,56,48,40,32,24,16, 8,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表的意思就是第一次变换时,第58位移到第1位,第50位移到第2位,......依此类推。得到64位数据,将这数据前后分成两块L[0][32],R[0][32]。5.加密过程,对R[i][32]进行扩展变换成48位数,方法如下,记为E(R[i][32])32,  1,  2, 3, 4,  5, 4,  5,  6, 7, 8, 9,8,9,10,11,12,13,12,13, 14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1,6.将E(R[i][32])与K[i][48]作异或运算,得到48位数,将48位数顺序分成8份,6位一份,B[8][6]。7.使用S[i]替换B[i][6]。过程如下:取出B[i][6]的第1位和第6位连成一个2位数m,m就是S[i]中对应的行数(0-3),取出B[i][6]的第2到第5位连成一个4位数n(0-15),n就是S[i]中对应的列数,用S[i][m][n]代替B[i][6]。S是4行16列的对应表,里面是4位的数,一共有8个S,定义如下:S[1]:  14,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,9,7,3,10,5,0,  15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,S[2]:   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,S[3]:   10,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,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,S[4]:   7,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,S[5]:  2,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,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,S[6]:  12,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,S[7]:  4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,  13,0,11,7,4,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,S[8]:  13,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,8.将从B[i][6]经过S得到的8个4位数连起来得到32位数。对这个数进行如下变换:  16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,  2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25, 得到的结果与L[i][32]作异或运算,把结果赋给R[i][32]。9.把R[i-1][32]的值赋给L[i],从5开始循环。直到K[16][48]结束。10.将最后的L,R合并成64位,然后进行如下转化得到最后的结果。这是对第4步的一个逆变化。 40,8,48,16,56,24,64,32, 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以上是Des的加密过程,解密过程同样,只需要把16个子密钥K[i][48]的顺序颠倒过来就行了。代码:#include#include#include#defineENCRYPT1#defineDECRYPT0staticvoidprintHex(char*cmd,intlen);staticvoidprintArray(constchar*In,intlen);staticvoidF_func(boolIn[32],constboolKi[48]);//f函数staticvoidS_func(boolOut[32],constboolIn[48]);//S盒代替staticvoidTransform(bool*Out,bool*In,constchar*Table,intlen);//变换staticvoidXor(bool*InA,constbool*InB,intlen);//异或staticvoidRotateL(bool*In,intlen,intloop);//循环左移staticvoidByteToBit(bool*Out,constchar*In,intbits);//字节组转换成位组staticvoidBitToByte(char*Out,constbool*In,intbits);//位组转换成字节组//16位子密钥staticboolSubKey[16][48];//64位经过PC1转换为56位(PC-1)conststaticcharPC1_Table[56]={57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4};//左移conststaticcharLOOP_Table[16]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};//排列选择2(PC-2)conststaticcharPC2_Table[48]={14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32};//Ri_1(32位)经过变换E后膨胀为48位(E)voidF_funcstaticconstcharE_Table[48]={32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,1};//8个4比特合并为32比特的排列PconststaticcharP_Table[32]={16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25,};//经过S盒S-boxesconststaticcharS_Box[8][4][16]={{//S1{14,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,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}},{//S3{10,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,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}},{//S4{7,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}},{//S5{2,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,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}},{//S6{12,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}},{//S7{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},{13,0,11,7,4,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}},{//S8{13,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}}};//初始排列(IP)conststaticcharIP_Table[64]={58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,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};//L16与R16合并后经过IP_1的最终排列(IP**-1)conststaticcharIPR_Table[64]={40,8,48,16,56,24,64,32,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};voidDes_SetKey(constcharKey[8]);//生成子密钥voidDes_Run(charOut[8],charIn[8],boolType);//DES算法intmain(){charkey[12]={1,2,3,4,5,6,7,8};charstr[12];charstr2[12];//printArray(PC2_Table,sizeof(PC2_Table)/sizeof(PC2_Table[0]));scanf("%s",&str);printf("Beforeencrypting:");puts(str);Des_SetKey(key);memset(str2,0,sizeof(str2));Des_Run(str2,str,ENCRYPT);printf("Afterencrypting:");//printf("%s\n",str2);printHex(str2,8);memset(str,0,sizeof(str));printf("Afterdecrypting:");Des_Run(str,str2,DECRYPT);puts(str);return0;}voidDes_SetKey(constcharKey[8]){inti;staticboolK[64],*KL=&K[0],*KR=&K[28];ByteToBit(K,Key,64);//转换为二进制Transform(K,K,PC1_Table,56);//64比特的密钥K,经过PC-1后,生成56比特的串。//生成16个子密钥for(i=0;i<16;i++){//循环左移,合并RotateL(KL,28,LOOP_Table[i]);RotateL(KR,28,LOOP_Table[i]);Transform(SubKey[i],K,PC2_Table,48);}}voidDes_Run(charOut[8],charIn[8],boolType){inti;staticboolM[64],tmp[32],*Li=&M[0],*Ri=&M[32];//转换为64位的数据块ByteToBit(M,In,64);//IP置换(初始)Transform(M,M,IP_Table,64);//该比特串被分为32位的L0和32位的R0两部分。if(Type==ENCRYPT){//16轮置换for(i=0;i<16;i++){memcpy(tmp,Ri,32);//R[i]=L[i-1]xorf(R[i-1],K[i])F_func(Ri,SubKey[i]);//2.4.6Exclusive-ortheresultingvaluewithL[i-1].//R[I]=PXORL[I-1]Xor(Ri,Li,32);//L[i]=R[i-1]memcpy(Li,tmp,32);}}else{//如果解密则反转子密钥顺序for(i=15;i>=0;i--){memcpy(tmp,Li,32);F_func(Li,SubKey[i]);Xor(Li,Ri,32);memcpy(Ri,tmp,32);}}//R16与L16合并成64位的比特串。R16一定要排在L16前面。R16与L16合并后成的比特串,经过置换IP-1后所得的比特串就是密文。Transform(M,M,IPR_Table,64);BitToByte(Out,M,64);}//将32比特的输入再转化为32比特的输出voidF_func(boolIn[32],constboolKi[48]){staticboolMR[48];//输入Ri-1(32比特)经过变换E后,膨胀为48比特Transform(MR,In,E_Table,48);//异或Xor(MR,Ki,48);//膨胀后的比特串分为8组,每组6比特。各组经过各自的S盒后,又变为4比特(具体过程见后),合并后又成为32比特。S_func(In,MR);//该32比特经过P变换后,输出的比特串才是32比特的f(Ri-1,Ki)。Transform(In,In,P_Table,32);}voidS_func(boolOut[32],constboolIn[48]){charj,m,n;//膨胀后的比特串分为8组,每组6比特。for(j=0;j<8;j++,In+=6,Out+=4){//在其输入In[0],In[1],In[2],In[3],In[4],In[5]中,计算出m=In[0]*2+In[5],n=In[4]+In[3]*2+In[2]*4+In[1]*8,再从Sj表中查出m行,n列的值Smn。将Smn化为二进制,即得Si盒的输出。m=(In[0]<<1)+In[5];n=(In[1]<<3)+(In[2]<<2)+(In[3]<<1)+In[4];ByteToBit(Out,&S_Box[(int)j][(int)m][(int)n],4);}}//打印指定位置指定长度HEX值staticvoidprintHex(char*cmd,intlen){inti;for(i=0;i>(i%8))&1;}}voidBitToByte(char*Out,constbool*In,intbits){inti;memset(Out,0,(bits+7)/8);for(i=0;i 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的幻数(四个整数):标准的幻数(物理顺序)是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。如果在程序中定义应该是(A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L)。    第四步、四轮循环运算:循环的次数是分组的个数(N+1)     1)将每一512字节细分成16个小组,每个小组64位(8个字节)    2)先认识四个线性函数(&是与,|是或,~是非,^是异或)F(X,Y,Z)=(X&Y)|((~X)&Z)  G(X,Y,Z)=(X&Z)|(Y&(~Z))  H(X,Y,Z)=X^Y^Z  I(X,Y,Z)=Y^(X|(~Z))   3)设Mj表示消息的第j个子分组(从0到15),<<>(j*8+4))&0x0F)+hex_chr.charAt((num>>(j*8))&0x0F);returnstr;}privateint[]str2blks_MD5(Stringstr){intnblk=((str.length()+8)>>6)+1;int[]blks=newint[nblk*16];inti=0;for(i=0;i>2]|=str.charAt(i)<<((i%4)*8);}blks[i>>2]|=0x80<<((i%4)*8);blks[nblk*16-2]=str.length()*8;returnblks;}privateintadd(intx,inty){return((x&0x7FFFFFFF)+(y&0x7FFFFFFF))^(x&0x80000000)^(y&0x80000000);}privateintrol(intnum,intcnt){return(num<>>(32-cnt));}privateintcmn(intq,inta,intb,intx,ints,intt){returnadd(rol(add(add(a,q),add(x,t)),s),b);}privateintff(inta,intb,intc,intd,intx,ints,intt){returncmn((b&c)|((~b)&d),a,b,x,s,t);}privateintgg(inta,intb,intc,intd,intx,ints,intt){returncmn((b&d)|(c&(~d)),a,b,x,s,t);}privateinthh(inta,intb,intc,intd,intx,ints,intt){returncmn(b^c^d,a,b,x,s,t);}privateintii(inta,intb,intc,intd,intx,ints,intt){returncmn(c^(b|(~d)),a,b,x,s,t);}publicStringcalcMD5(Stringstr){int[]x=str2blks_MD5(str);inta=0x67452301;intb=0xEFCDAB89;intc=0x98BADCFE;intd=0x10325476;for(inti=0;ius
本文档为【密码学课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥20.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
正方体
暂无简介~
格式:doc
大小:50KB
软件:Word
页数:24
分类:
上传时间:2022-05-10
浏览量:11