逆矩阵在希尔密码中的应用

简介: 逆矩阵在希尔密码中的应用

今天看到这样的一个密码问题。研究了一下简单写了如下代码,由于不太了解求逆矩阵的方法,所以A矩阵的逆矩阵直接给定了。如果有知道求逆矩阵方法的大神方便的话请给指点一下。

1. #include <bits/stdc++.h>
2. using namespace std;
3. int A[3][3]={
4.  {3,0,4},
5.  {7,1,6},
6.  {5,0,9}}; //密钥矩阵
7. int An[3][3]={
8.  {5,0,18},
9.  {25,1,20},
10.   {3,0,19}}; //A矩阵的逆矩阵
11. int n=3,m=4;//n行 m列
12. int B[3][4];
13. int C[3][4];
14. string s_yuan="iamsointoyou";
15. string s_mi="alfottxzwcdb";
16. void Do_B(string s){//将源码转换成数字矩阵
17.   int t=0;
18.   for(int j=0;j<m;j++)
19.     for(int i=0;i<n;i++)
20.       B[i][j]=(s[t++]-'a'+1)%26;
21. }
22. void Do_C(){//将数字矩阵C转换成密码 并输出
23.   for(int j=0;j<m;j++)
24.     for(int i=0;i<n;i++)
25.       if(C[i][j]==0) cout<<'z';
26.   else cout<<(char)(C[i][j]-1+'a');
27.   cout<<endl;
28. }
29. void Mul_GZ(int A[3][3],int B[3][4] ){//加密矩阵 A[][]*B[][]=C[][]
30.   for(int i=0;i<n;i++)
31.     for(int j=0;j<m;j++){
32.     C[i][j]=0;
33.     for(int k=0;k<n;k++)
34.       C[i][j]+=A[i][k]*B[k][j];
35.     C[i][j]%=26;//结果取模26
36.   }
37. }
38. void Prin(int x[][4]){//矩阵输出函数
39.   //矩阵输出
40.   for(int i=0;i<n;i++){
41.     for(int j=0;j<m;j++) cout<<x[i][j]<<" ";
42.     cout<<endl;
43.   }
44. }
45. int main()
46. { 
47.   cout<<"源码:"<<s_yuan<<endl;
48.   Do_B(s_yuan); 
49.   cout<<"源码转换成为数字矩阵B:"<<endl;
50.   Prin(B);//输出矩阵B
51.   Mul_GZ(A,B);//矩阵A*矩阵B=矩阵C
52.   cout<<"矩阵C:"<<endl;
53.   Prin(C);//输出矩阵C
54.   cout<<"将数字矩阵C转换成密码 并输出"<<endl;
55.   Do_C();//将数字矩阵C转换成密码 并输出
56.   cout<<endl;
57.   Do_B(s_mi); 
58.   cout<<"密码转换成为数字矩阵B:"<<endl;
59.   Prin(B);
60.   Mul_GZ(An,B);
61.   cout<<"将数字矩阵C转换成原码 并输出"<<endl;
62.   Do_C();
63.   return 0;
64. }

结果输出:

 

相关文章
|
8月前
|
数据安全/隐私保护 Python
BUUCTF 传统知识+古典密码 1
BUUCTF 传统知识+古典密码 1
192 0
|
数据安全/隐私保护
CTF密码学·置换密码,栅栏密码,曲路密码
1.置换密码 置换密码(Permutation Cipher)又叫换位密码(Transposi-tionCipher),它根据一定的规则重新排列明文,以便打破明文的结构特性。置换密码的特点是保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序
721 1
CTF密码学·置换密码,栅栏密码,曲路密码
|
4月前
|
算法 数据安全/隐私保护
leetcode-753: 破解保险箱
leetcode-753: 破解保险箱
43 0
|
12月前
|
数据安全/隐私保护
希尔密码(Hill)
希尔密码(Hill)
75 0
|
存储 数据安全/隐私保护
【每日一题Day83】LC753破解保险箱 | dfs 贪心
题意要求输入一个字符串,能够打开保险柜,密码的长度为n,每位数字小于k,因此题意可以转化为找到一个最短字符串,其包含了n位k进制所有的排列组合
68 0
|
数据安全/隐私保护 Python
达芬奇密码题解
达芬奇密码题解
135 0
达芬奇密码题解
|
数据安全/隐私保护
凯撒密码 (20 分)
凯撒密码 (20 分)
309 0
|
数据安全/隐私保护
804 唯一摩尔斯密码词 leetcode
804 唯一摩尔斯密码词 leetcode
60 0
|
算法 数据安全/隐私保护
算法竞赛入门题目做题记录:小书童——凯撒密码
算法竞赛入门题目做题记录:小书童——凯撒密码
344 0
|
数据安全/隐私保护
804. 唯一摩尔斯密码词 : 简单模拟题
804. 唯一摩尔斯密码词 : 简单模拟题