仿射密码—加密、解密

发布时间:2022-07-01 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了仿射密码—加密、解密脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
#include<iostream>
#include<string>
using namespace std;
int GCD(int  x, int  y) {//求两个数的最大公因数;可改为bool类型函数,判断x,y是否为素数即可;
    return y == 0 ? x : GCD(y, x % y);
}
int find_ni(int a) {//求逆元,方法有三种;
    int i;
    for ( i = 1; (i * a - 1) % 26 != 0; i++);
    return i;
}
string encrypt(int k, int b, string message) {//加密
    for (int i = 0; i < message.size(); i++) {
        message[i] -= 'a';
        message[i] = (k * message[i] + b) % 26;
        message[i] = message[i] + 'a';
    }
    return message;
}
string decrpty(int a, int b, string cipher) {//解密
    int s = find_ni(a);
    for (int i = 0; i < cipher.size(); i++) {
        cipher[i] -= 'a';
        cipher[i] = (s*cipher[i]+(26-s)*b)%26;
        cipher[i] = cipher[i] + 'a';
    }
    return cipher;
}
int main() {
    string y, str;
    int k, b,n=6;
    cout << "请输入密钥k,b:";
    cin >> k >> b;
    while (GCD(k, b) != 1) {
            cout << endl << "请重新输入k,b:";
            cin >> k >> b;
    }
    while (n != 0) {
        cout << "请选择 1-加密  2-解密  0-退出" << endl;
        cin >> n;
        switch (n) {
        case 1:
            cout << "请输入明文";
            cin >> str;
            y = encrypt(k, b, str);
            cout << "This encrypt is " << y << endl;
            break;
        case 2:
            cout << "请输入密文";
            cin >> str;
            y = decrpty(k, b, str);
            cout << "This decrypt is " << y << endl;
            break;
        }
    }
    return 0;
}

文章推荐—求逆元三种方法、仿射密码原理

脚本宝典总结

以上是脚本宝典为你收集整理的仿射密码—加密、解密全部内容,希望文章能够帮你解决仿射密码—加密、解密所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: