// APA.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include<string>
using namespace std;
int gcd(int n, int m)
{
int r, temp;
if (n < m)
{
temp = n;
n = m;
m = temp;
}
while (m != 0)
{
r = n % m;
n = m;
m = r;
}
return n;
}
int main()
{
string Z = "计算机学院网络工程信息安全,我们热爱中华人民共和国。大家";
string C = "和院程安我爱计";
string res;
int zln = Z.length() / 2;
int cln = C.length() / 2;
int a, b, c, p,pos[7];
for (int i = 0;i < cln;i++)
{
for (int j = 0;j < zln;j++)
{
if (C[i * 2] == Z[j * 2] && C[i * 2 + 1] == Z[j * 2 + 1])
{
pos[i] = j;
}
}
}
for (a = 2;a < 28;a++)
{
if (gcd(a, 28) == 1)
{
for (p = 2;p < 28;p++)
{
if (a * p % 28 == 1)
{
break;
}
}
for (b = 0;b < 28;b++)
{
res.clear();
for (int i = 0; i < cln; i++) {
// 特别注意小于 0 的情况,这与 py 不同,因为我们需要加上两字节
c = (p * (pos[i] - b)) % 28;
if (c >= 0) {
res = res + Z[2 * c] + Z[2 * c + 1];
}
else {
c = c + 28;
res = res + Z[2 * c] + Z[2 * c + 1];
}
}
cout << "a= " << a << " b= " << b << "时" << "明文为:" << res << endl;
}
}
}
}
评论0