凯撒密码算法

更新时间:2023-09-03 16:36:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

网络安全:凯撒密码算法

移位法:
#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;i<5000;i++)
{
if(in[i]!='\0')
{
printf("%c",in[i]);

网络安全:凯撒密码算法

}
else
{
break;
}
}
printf("\n");
printf("加密后的密文为:");
for(i=0;i<5000;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;i<5000;i++)
{
c=i/6;
out[jiemibox[i%6]+c*6-1]=in[i];
}

printf("您所需要解密的密文为:");
for(i=0;i<5000;i++)
{
if(in[i]!='\0')
{
printf("%c",in[i]);
}
else
{
break;
}
}
printf("\n");
printf("解密后的明文为:");
for(i=0;i<5000;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)
{
exit(1);
}
else
{
printf("您输入的序号不正确,请重新输入:\n");
goto list;
}

}

本文来源:https://www.bwwdw.com/article/z4pi.html

Top