凯撒密码算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

凯撒密码算法
网络安全:凯撒密码算法
移位法:
#include stdio.h
#include stdlib.h
char *Encrypt(char *pwd,int key) //加密{
for(int i=0;*(pwd+i)!='\0';i++)
{
if(*(pwd+i)='a'*(pwd+i)='z')
*(pwd+i)=(*(pwd+i)-'a'+key)%26+'a';
else if(*(pwd+i)='A'*(pwd+i)='Z')
*(pwd+i)=(*(pwd+i)-'A'+key)%26+'A';
}
return pwd;
}
char *Decrypt(char *pwd,int key) //解密{
for(int i=0;*(pwd+i)!='\0';i++)
{
if(*(pwd+i)='a'*(pwd+i)='z')
{
if(*(pwd+i)-'a'=key%26)
*(pwd+i)=*(pwd+i)-key%26;
else *(pwd+i)='z'-(key%26-(*(pwd+i)-'a'))-1; }
else if(*(pwd+i)='A'*(pwd+i)='Z')
{
if(*(pwd+i)-'A'=key%26)
*(pwd+i)=*(pwd+i)-key%26;
else *(pwd+i)='Z'-(key%26-(*(pwd+i)-'A'))-1; }
}
return pwd;
}
void main()
{
char *pwd;
int key;
pwd=(char*)malloc(sizeof(char));
printf(“Input your password:");
gets(pwd);
printf("Input a key:");
scanf("%d",key);
printf("The Ciphertext is:");
printf("%s\n",Encrypt(pwd,key));
}
------------------------------------------------------------------
替换法:
#include stdio.h
#include stdlib.h
#include string.h
void table(char *keyword) //筛选密钥(去重复去空格)
{
int i,j,k;
for(i=0;*(keyword+i)!='\0';i++)
{
for(j=i;*(keyword+j)!='\0';j++)
{
if(i!=j)
if(*(keyword+i)==*(keyword+j)||*(keyword+j)==' ')
{
for(k=j;*(keyword+k)!='\0';k++)
*(keyword+k)=*(keyword+k+1);
j--;
}
}
}
}
void newTab(char *keyword) //生成密钥表{
char ch;
int i;
int t;
for(t=0;*(keyword+t)!='\0';t++);
for(ch='a';ch='z';ch++)
{
for(i=0;*(keyword+i)!=ch;i++)
{
if(*(keyword+i)=='\0')
{
*(keyword+t)=ch;
t++;
break;
}
}
*(keyword+t)='\0';
}
char *Ciphertext(char *keyword,char *Plaintext) //按密码表加密{
char ch;
int i,j;
for(i=0;*(Plaintext+i)!='\0';i++)
{
for(ch='a',j=0;ch='z';ch++,j++)
{
if(*(Plaintext+i)==ch)
{
*(Plaintext+i)=*(keyword+j);
break;
}
}
}
return Plaintext;
}
char *Decrypt(char *keyword,char *Plaintext) //解密
char ch;
int i,j;
for(i=0;*(Plaintext+i)!='\0';i++)
{
for(ch='a',j=0;*(keyword+j)!='\0';ch++,j++) {
if(*(Plaintext+i)==*(keyword+j))
{
*(Plaintext+i)=ch;
break;
}
}
}
return Plaintext;
}
void main()
{
char *keyword,*Plaintext,*tmp=NULL; keyword=(char*)malloc(sizeof(char)); Plaintext=(char*)malloc(sizeof(char));
printf("Input key word:"); //输入欲用密钥
gets(keyword);
printf("Input Plaintext:"); //输入要转换的明文
gets(Plaintext);
table(keyword); //去空格去重复
newTab(keyword); //生成密码表
tmp=Ciphertext(keyword,Plaintext); //对应着密码表生成密文puts(tmp); //输出密文
puts(Decrypt(keyword,tmp));
//解密输出
}
3.
printf("您所需要加密的明文为:");
for(i=0;i5000;i++)
{
if(in[i]!='\0')
{
printf("%c",in[i]);
网络安全:凯撒密码算法
}
else
{
break;
}
}
printf("\n");
printf("加密后的密文为:");
for(i=0;i5000;i++)
{
if(in[i]!='\0')
{
printf("%c",out[i]);
}
else
{
break;
}
}
printf("\n");
}
//解密函数
void jiemi()
{
int i,c;
printf("请输入要解密的密文:");
getchar(ch);
gets(in);
for(i=0;i5000;i++)
{
c=i/6;
out[jiemibox[i%6]+c*6-1]=in[i];
}
printf("您所需要解密的密文为:"); for(i=0;i5000;i++)
{
if(in[i]!='\0')
{
printf("%c",in[i]);
}
else
{
break;
}
}
printf("\n");
printf("解密后的明文为:");
for(i=0;i5000;i++)
{
if(in[i]!='\0')
{
printf("%c",out[i]);
}
else
{
break;
}
}
printf("\n");
}
//主函数
void main()
{
int choose;
list:
printf("____欢迎使用置换密码功能____"); printf("请选择需要进行的操作种类:\n"); printf("1、加密\n");
printf("2、解密\n");
printf("3、退出\n");
scanf("%d",choose); if(choose==1) {
jiami();
goto list;
}
else if(choose==2) {
jiemi();
goto list;
}
else if(choose==3) {。

相关文档
最新文档