📄 kaiser1.c
字号:
#include <stdio.h>
int gcd(int a ,int b) /*求两数的最大公约数,返回值为最大公约数*/
{
int t;
t=a;
while(!((a%t==0)&&(b%t==0))) t--;
return t;
}
int inv(int a) /* 求一个数的模逆元,若返回为0表示该数没有模逆元*/
{
int i;
for(i=1;i<26;i++)
if ((a*i)%26==1) return i;
if(i>=26) return 0;
}
int encrypt(int m,int k1,int k2) /*加密*/
{
int c;
c=(k1*m+k2)%26;
return c;
}
int decrypt(int c,int k1,int k2) /*解密*/
{
int m;
m=inv(k1)*(c-k2+26)%26;
return m;
}
main()
{int i,len,key1,key2;
char m[100],c[100],m1[100];
for(i=0;i<100;i++)
c[i]=m1[i]='\0';
printf("\nplease input the plantext(Length<100):\n");
gets(m);
printf("\nPlease input the pasword key1,key2:\n");
scanf("%d,%d",&key1,&key2);
while(gcd(key1,26)!=1)
{
printf("\ngcd(%d,26)is not 1, please input key1 again:",key1);
scanf("%d",&key1);
}
len=strlen(m);
for(i=0;i<len;i++)
{
if(m[i]!=32)
{
c[i]=encrypt(m[i]-97,key1,key2);
c[i]=c[i]+97;
}
else
c[i]=m[i];
}
printf("\nthe encrypt result is: %s",c);
for(i=0;i<len;i++)
{
if(c[i]!=32)
m1[i]=decrypt(c[i]-97,key1,key2)+97;
else
m1[i]=c[i];
}
printf("\nthe decrypt result is: %s",m1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -