加密函数: Y=(AX+B)%26
解密函数: X=(A的逆元)*(Y-B)%26
#include<iostream> #include<cstdio> #include<cstdlib> #include<map> #include<string> using namespace std; map<char,int>letter; map<int,int>num; int numa[20]={1,3,5,7,9,11,15,17,19,21,23,25}; void init() { for(int i=0;i<=26;i++) { char l='a'+i; letter[l]=i; } num[1]=1; num[3]=9;num[9]=3; num[5]=21;num[21]=5; num[7]=15;num[15]=7; num[11]=19;num[19]=11; num[17]=23;num[23]=17; num[25]=25; } void ac(char s[],int a,int b) { int len=strlen(s); string ans=""; for(int i=0;i<len;i++) { int c=letter[s[i]]; int d=(a*c+b)%26; ans+=('a'+d); } cout<<ans<<endl; } void solve(char s[],int a,int b) { int len=strlen(s); string ans=""; for(int i=0;i<len;i++) { int c=letter[s[i]]; int d=(num[a]*(c-b))%26; if(d<0) d+=26; ans+=('a'+d); } cout<<ans<<" "<<"a="<<a<<",b="<<b<<endl; } int main() { init(); printf("请输入明文:\n"); char s[15000],m[15000]; scanf("%s",&s); int a,b; printf("请输入密钥:\n"); scanf("%d %d",&a,&b); printf("输出密文:\n"); ac(s,a,b); printf("请输入密文:\n"); scanf("%s",m); printf("请输入密钥:\n"); printf("请输明文:\n"); solve(m,a,b); system("pause"); return 0; }