您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 列置换密码C语言实现
#includestdio.h#includestring.h#defineLENGTH26intmain(){//加密的变量inti=0,j=0,key_len=0,text_len=0,row=0,k=0;charkey[LENGTH]={0};charnumber[LENGTH]={0};charorder[LENGTH]={0};charptext[LENGTH*10]={0};charctext[LENGTH*10]={0};//解密的变量charkey1[LENGTH]={0};charptext1[LENGTH*10]={0};charctext1[LENGTH*10]={0};charnumber1[LENGTH]={0};charorder1[LENGTH]={0};printf(\t*****Encryption*****\n);printf(Pleaseinputtheplaintxet:\n);scanf(%s,ptext);//计算明文长度i=0;while(ptext[i]!=0){text_len++;i++;}printf(Pleaseinputthekeyword:\n);scanf(%s,key);//计算密钥长度i=0;while(key[i]!=0){key_len++;i++;}//处理密钥,得出列置换的顺序for(i=0;ikey_len;i++){number[i]=0;for(j=0;jkey_len;j++){if(key[j]key[i])number[i]++;}}//在密钥中出现相同字符的处理for(i=0;ikey_len;i++){for(j=i+1;jkey_len;j++){if(key[j]==key[i])number[j]++;}}//计算行数if(text_len%key_len==0)row=text_len/key_len;elserow=text_len/key_len+1;//列置换for(i=0;ikey_len;i++){for(j=0;jrow;j++){ctext[i*row+j]=ptext[number[i]+key_len*j];}}for(i=0;ikey_len;i++){for(j=0;jrow;j++){printf(%c,ctext[i*row+j]);}}printf(\n\t*****Decryption*****\n);printf(Pleaseinputtheciphertext\n);scanf(%s,ctext1);i=0;text_len=0;key_len=0;while(ctext1[i]!=0){text_len++;i++;}printf(Pleaseinputthekeyword);scanf(%s,key1);i=0;while(key1[i]!=0){key_len++;i++;}for(i=0;ikey_len;i++){number1[i]=0;for(j=0;jkey_len;j++){if(key1[j]key1[i])number1[i]++;}}for(i=0;ikey_len;i++){for(j=i+1;jkey_len;j++){if(key1[j]==key1[i])number1[j]++;}}if(text_len%key_len==0)row=text_len/key_len;elserow=text_len/key_len+1;//还原列置换for(i=0;ikey_len;i++){for(j=0;jrow;j++){ptext1[number1[i]+key_len*j]=ctext1[i*row+j];}}for(i=0;ikey_len;i++){for(j=0;jrow;j++){printf(%c,ptext1[i*row+j]);}}return0;}
本文标题:列置换密码C语言实现
链接地址:https://www.777doc.com/doc-1652626 .html