⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kaiser1.c

📁 凯撒密码算法的实现 加密:c=k1*m+k2 mod 26 解密:m=k1-1(c-k2) mod 26
💻 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 + -