仿射密码是属于单表置换密码,是加法密码和乘法密码的组合。
加密函数 e(x)= ax+b (mod 26),且要求gcd(a,26)=1
解密函数 x = a^(-1)(e(x)-b)
加解密代码如下:
#include <iostream>
#include <string.h>
using namespace std;
char m[100];
char c[100];
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 Jiami(char m[],int k1,int k2) //加密
{
int len=strlen(m);
for(int i=0;i<len;i++)
{
c[i]=(k1*(m[i]-97)+k2)%26+65; //加密公式 e(x)=k1*x+k2 (mod 26)
}
cout<<"加密后的密文为:";
for(int i=0;i<len;i++)
cout<<c[i];
cout<<endl;
}
void Jiemi(char c[],int k1,int