密码学课程设计
} ciphertext[i]%=26; if(ciphertext[i]<0)ciphertext[i]+=26; char dd = ciphertext[i] + a2; s2.push_back(dd); } return s2; }
int DET(int n ,int c [M][M]) {
if(n==2)return c[0][0]*c[1][1]-c[0][1]*c[1][0];
int i_1,j_1,d; //d为数组b的行 int b[M][M]; //用于存放余子式 int p=0,q=0; int sum=0;
for(i_1=0;i_1 for(d=0;d if(d for(j_1=0;j_1 b[d][j_1]=c[d+p][j_1+1]; } } if(i_1%2==0) q=1; else q=-1; sum=sum+c[i_1][0]*q*DET(n-1,b); } return sum; } void show() { cout<<\ ***********************************************************\ cout<<\ ***********************************************************\ cout<<\ ****************** 欢迎使用加解密系统 ***************\ 6 密码学课程设计 cout<<\ **************请根据提示输入秘钥、明文和密文***************\ cout<<\ ***********************************************************\ cout<<\ ***********************************************************\ cout<<\按回车键有电脑随机生成秘钥矩阵\ system(\ cout< int main() { show(); srand(time(0)); next: int a[M][M];//存储原矩阵 int _a[M][M];//a的逆矩阵 int b[M][M];//a储伴随矩阵 int det = 0; //行列式 int _det = 0; //行列式的逆 for(int i=0;i 密码学课程设计 int A_i_j=0; int c[M][M];//用于存储余子式的矩阵 int q=0;//行 int p=0;//列 //下面这两个循环完成了除去第i行第j列的余子式 for(int k=0;k 8 密码学课程设计 cout<<\行列式与26的公约数\ if(gcd(det,26)!=1 && gcd(det,26)!= -1) { cout<<\该秘钥不存在逆矩阵,按回车键重新随机生成新的秘钥矩阵:\ system(\ goto next; } det = det % 26; if(det<0)det+=26; for(int k= 0;k<26;k++) { if((k*26+1)Tt==0) { _det = (k*26+1)/det; break; } } cout<<\行列式的逆为:\ for(int i=0;i 9 密码学课程设计 next1: cout<<\******************* 1:加****************************\ cout<<\******************* 2:解****************************\ cout<<\******************* 3:退****************************\ cout<<\******************* 4:更改秘****************************\ int nn; cin>>nn; int a1=65,a2=97; if(nn==1) { string s1,s2; cout<<\请输入输入明文:\ cin>>s1; s2 = encryption_or_decryption(a2,a1,s1,a); cout<<\密文为: \ goto next1; } else if(nn==2) { string s1,s2; cout<<\请输入输入密文:\ cin>>s1; s2 = encryption_or_decryption(a1,a2,s1,_a); cout<<\解密后的明文: \ goto next1; } else if(nn==3) { cout<<\谢谢使用加解密系统,本程序结束\ return 0; } else if(nn==4) { goto next; } else { cout<<\输入错误,请重新输入:\ 10 密 密 出 钥