仿射加密例题计算

,对单词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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值