首页 > 代码库 > 维吉尼亚密码加密、解密算法(破解还不会);
维吉尼亚密码加密、解密算法(破解还不会);
#include <iostream> #include<cstdio> using namespace std; void init_pass_table(char (&code_table)[27][27]){//制密码对照表;(不能当做一维数组来看会有别的问题) code_table[0][0]=‘0‘; for(int i=0;i<26;i++){ code_table[0][1+i]=‘a‘+i; } for(int i=0;i<26;i++){ code_table[1+i][0]=‘a‘+i; } for(int i=0;i<26;i++){ for(int j=0;j<26;j++){ if(i+j>25){ code_table[i+1][j+1]=‘a‘+j+i-26; } else code_table[i+1][j+1]=‘a‘+j+i; } } } void input_text(int a,char* text){//输入明文、密文或密码;//这个方法不用了;用的下边得那个,忘了删除了 cin.sync(); //for(int i=0;i<a;i++){ cin.get(text,a+1);//这里可能有问题; // cin>>text[i]; } int text_input(char a[1000]){ gets(a); int d=0; for(int i=0;a[i]!=‘\0‘;i++){ //cout<<a[i]<<‘ ‘; d++; } return d; } void make_pass_test(int d,char* a,int e,char* b,char c[27][27],int flag){//生成密文;a是明文;b是秘钥 // cout<<c<<endl; /*int symbol=d; int ming_num=0; char new_mingwen[d]; for(int i=0;i<d;i++){//明文去掉空格的长度; if(a[i]==‘ ‘){ continue; } ming_num++; } cout<<"明文的有效长度"<<ming_num<<endl; for(int i=0;i<symbol;i++){ new_mingwen[i]=a[i]; } //cout<<new_mingwen<<endl; cout<<sizeof(new_mingwen)<<endl;//还没有更新的; for(int i=0;i<symbol;i++){//将new_mingwen[]的空格去掉,好在下边和秘钥查表; if(new_mingwen[i]==‘ ‘){ for(int j=i;j<d-1;j++){ new_mingwen[j]=new_mingwen[j+1]; } symbol--; } } if(e>ming_num){ cout<<"error"<<endl; }*/ char new_miyao[d]; int cf=0; if(e<d){//将秘钥做成和(明文或密文)一一对应的形式; for(int i=0;i<d;i++){ if(a[i]==‘ ‘){ new_miyao[i]=a[i]; cf++; continue; } else{ int h=i-cf; while(h>=e){ h-=e; } new_miyao[i]=b[h]; } } //cout<<new_miyao<<endl; } if(flag==1){ for(int i=0;i<d;i++){//一一对应在表里取值; if(a[d]==‘ ‘){ cout<<‘ ‘; continue; } cout<<c[(int)(a[i]-96)][(int)(new_miyao[i]-96)]; } cout<<endl; } if(flag==2){//对照表找到明文; for(int i=0;i<d;i++){ if(new_miyao[i]==‘ ‘){ cout<<‘ ‘; continue; } for(int j=0;j<27;j++){ if(c[(int)(new_miyao[i]-96)][j]==a[i]){//找到对应的明文字母; cout<<c[1][j]; break; } } } cout<<endl; } } int main(){ char code_table[27][27]={0}; init_pass_table(code_table); int choose; while(1){ cout<<"choose encode or decode(Enter ‘1‘ stand for encode;‘2‘-decode):"<<endl; cout<<"if you want out ,please Enter ‘3‘;"<<endl; cin>>choose; if(choose==1){ int input_size,key_size; cout<<"请输入明文(可以包含空格)"<<endl; char mingwen[1000]; gets(mingwen); input_size=text_input(mingwen); cout<<"请输入秘钥"<<endl; char miyao[1000]; key_size=text_input(miyao); make_pass_test(input_size,mingwen,key_size,miyao,code_table,1); } else if(choose==2){ int input_size,key_size; cout<<"请输入密文(可以包含空格)"<<endl; char miwen[1000]; gets(miwen); input_size=text_input(miwen); cout<<"请输入秘钥"<<endl; char miyao[1000]; key_size=text_input(miyao); make_pass_test(input_size,miwen,key_size,miyao,code_table,2); } else if(choose==3){ break; } } return 0; }
维吉尼亚密码加密、解密算法(破解还不会);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。