【现代密码学】仿射密码加密

//仿射变换主要是乘法与加法变换的结合
//C=a*m+k mod 26 加密
//M=a^-1(c-k)mod 26 解密
#include 
#include
#include
#include
#define MAX 10000
using namespace std;

int gcd(int a, int b) /*辗转相除法求a,b的最大公因数*/
{
    int k = 0;
    do
    {
        k = a%b;
        a = b;
        b = k;
    }
    while(k!=0);
    return a;
}

int Ni(int a, int b) /*求a相对于b的逆元*/
{
    int i = 0;
    while(a*(++i)%b!=1);  //a*i=1 mod b
    return i;
}

void Fshe(char c[MAX],char m) /*仿射密码*/
{
    int length, i=0, ka=0, kb=0, tmp;

    do
    {
        cout<<"ka 和 kb : ";
        cin>>ka>>kb;
        getchar();
        if(gcd(ka,94)!=1)
        {
            cout<<"密钥输入有误,请重新输入!\n";
            //如果输入的秘钥与模数94不互素则需要重新输入
        }
    }
    while(gcd(ka,94)!=1&&m=='d');  //用于验证秘钥的合法性
    length = strlen(c);
    if(m=='e')
    {
        for(i=0; i>m;
    switch(m)
    {
    case 'e':
        fin.getline(str,MAX);
        Fshe(str,m);  //加密操作
        //cout<

 

 

你可能感兴趣的:(本科课程)