,对单词hot进行加密并进行解密。(7,3)为密钥
abcdefghijklmnopqrstuvwxyz
a--0
h--7
o-14
t--19
加密 ax+b
h 7*7+3=52
o 7*14+3=101
t 7*19+3=136
取余
h--0-a
o--23-x
t--6-g
所以明文为axg
解密
a--0
x--23
g--6
解密 a的逆元(x-b) (mod m)
7对应的逆元为15
a 15(0-3)=-45
x 15(23-3)=300
g 15(6-3)=45
取余
a--7--h
x--14--o
g--19--t
//代码中加入了计算时间的函数
#include <bits/stdc++.h>
using namespace std;
int qiuniyuan(int a, int n)//求逆元的函数
{
for (int r = 0; r < n; r++)
{
if (a * r % n == 1)
return r;
}
return -1;
}
int main()
{
clock_t start,end;
start = clock();
string miwen;
getline(cin,miwen);
int A[] = {1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25};
for (int a = 0; a < 12; a++)//遍历密钥(a,b)中的a
{
for (int b = 0; b < 26; b++)//遍历密钥(a,b)中的b
{
int r = qiuniyuan(A[a], 26);
for (int i = 0; i < miwen.size(); i++)
{
if (miwen[i] >= 'A' && miwen[i] <= 'Z')
cout<< char(r * (miwen[i] - 'A' - b + 26) % 26 + 'A'); //注意这里要+26,因为可能y-b有负数
else if (miwen[i] >= 'a' && miwen[i] <= 'z')
cout << char(r * (miwen[i] - 'a' - b + 26) % 26 + 'a'); //注意这里要+26,因为可能y-b有负数
else
cout << miwen[i];
}
cout << endl;
}
}
end = clock();
cout << end - start << "ms" << endl;
return 0;
}