密码技术实验报告
- 格式:docx
- 大小:270.91 KB
- 文档页数:8
课程名称: 密码技术实验一
密码技术实验报告
入截
出截
入截
出截
维吉尼亚密码代码
// 维吉尼亚密码c.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
int _tmain(intargc, _TCHAR* argv[])
{
return 0;
}
#include "stdio.h"
#include "string.h"
void encrypt(char[],char[],char[]);
void decrypt(char[],char[],char[]);
int main()
{
intcaozuo;
charmingwen[100]="0";
charmiwen[100]="0";
charmiyue[100]="0";
printf("请选择加/解密操作:1加密,2解密:");
scanf("%d",&caozuo);
while((caozuo!=1)&&(caozuo!=2))//错误判断
{
printf("输入错误,请从新选择:");
scanf("%d",&caozuo);
}
if(caozuo==1){
printf("请输入您的明文:");scanf("%s",mingwen); printf("请输入您的密钥:");scanf("%s",miyue); encrypt(mingwen,miyue,miwen);
}
else if(caozuo==2)
{
printf("请输入您的密文:");scanf("%s",miwen);
printf("请输入您的密钥:");scanf("%s",miyue); decrypt(miwen,miyue,mingwen);
}
getchar();//回收回车
}
void encrypt(char mingwen[],char miyue[],char miwen[]) {
inti,j,n,m,len_miyue,len_mingwen;
j=0;
len_miyue= strlen(miyue);
len_mingwen= strlen(mingwen);
for(i=0;i<len_mingwen;i++)
{
if(mingwen[i]>='a' &&mingwen[i]<='z'){//小写转大写
m=65;n=97;
if(miyue[j%len_miyue]>='A' &&miyue[j%len_miyue]<='Z')//密钥为大写改为小写
miyue[j%len_miyue]=miyue[j%len_miyue]+32;
}
else if(mingwen[i]>='A' &&mingwen[i]<='Z'){//大写转小写
m=97;n=65;
if(miyue[j%len_miyue]>='a' &&miyue[j%len_miyue]<='z')//密钥为小写改为大写
miyue[j%len_miyue]=miyue[j%len_miyue]-32;
}
miwen[i]=(mingwen[i]-n+miyue[j%len_miyue]-n)%26+m;
j++;
}
printf("加密后的密文为:");
puts(miwen);
getchar();
}
void decrypt(char miwen[],char miyue[],char mingwen[])
{
inti,j,n,m,len_miyue,len_miwen;
j=0;
len_miyue= strlen(miyue);
len_miwen= strlen(miwen);
for(i=0;i<len_miwen;i++)
{
if(miwen[i]>='a' &&miwen[i]<='z'){//小写转大写
m=65;
if(miyue[j%len_miyue]>='A' &&miyue[j%len_miyue]<='Z'){
miyue[j%len_miyue]=miyue[j%len_miyue]+32;//密钥改为小写
}
}
else if(miwen[i]>='A' &&miwen[i]<='Z'){//大写转小写
m=97;
if(miyue[j%len_miyue]>='a' &&miyue[j%len_miyue]<='z') {
miyue[j%len_miyue]=miyue[j%len_miyue]-32;//密钥改为大写
}
}
mingwen[i]=(miwen[i]-miyue[j%len_miyue]+26)%26+m;
j++;
}
printf("解密后的明文为:");
puts(mingwen);
getchar();
}。