密码技术实验报告
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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'){//大写转小写
Calls:strlen();//判断密文长度,密钥长度;puts();//输出明文,getchar();//接受回车
Called By:intmain()//主函数调用
Input(type):miwen[100],char型
Output(type):mingwen[100],char型
Others:密钥大小写不敏感
void decrypt(char[],char[],char[]);
int main()
{
int caozuo;
char mingwen[100]="0";
char miwen[100]="0";
char miyue[100]="0";
printf("请选择加/解密操作:1加密,2解密:");
scanf("%d",&caozuo);
{
int i,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'){//小写转大写
}
getchar();//回收回车
}
void encrypt(char mingwen[],char miyue[],char miwen[])
{
int i,j,n,m,len_miyue,len_mingwen;
j=0;
len_miyue= strlen(miyue);
len_mingwen= strlen(mingwen);
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;
encrypt(mingwen,miyue,miwen);
}
else if(caozuo==2)
{
printf("请输入您的密文:");scanf("%s",miwen);
printf("请输入您的密钥:");scanf("%s",miyue);
decrypt(miwen,miyue,mingwen);
Called By:intmain()//主函数调用
Input(type):mingwen[100],char型;miyue[100],char型
Output(type):miwen[100],char型
Function2:voiddecrypt(charmiwen[],charmiyue[],charmingwen[])//解密函数
荐计算机上机实验内容及实验报告要求荐构建学校德育管理与评价体系的实验报告荐化学实验报告格式荐大学物理实验课程设计实验报告荐电路实验报告要求
云南大学软件学院
School of Software,YunnanUniversity
成绩
密码技术实验报告
密码技术实验报告
实验项目:实验一,第一题
实验要求
(内容)
while((caozuo!=1)&&(caozuo!=2))//错误判断
{
printf("输入错误,请从新选择:");
scanf("%d",&caozuo);
}
if(caozuo==1){
printf("请输入您的明文:");scanf("%s",mingwen);
printf("请输入您的密钥:");scanf("%s",miyue);
实现维吉尼亚密码
实验环境
Win7 64位,Visual studio(c语言环境)
实现功能
实现功能:明文与密钥通过维吉尼亚密码算法加密,密文与密钥通过维吉尼亚密码算法解密。密钥大小写不敏感,输出明密文大小写转换。达到题目要求
数据结构
intcaozuo;//用户选择加密/解密操作
charmingwen[100];//明文数组charmiwen[100];//密文数组charmiyue[100];//密钥数组
数据结构
intcaozuo;//用户选择加密/解密操作
charmingwen[100];//明文数组charmiwen[100];//密文数组charmiyue[26];//密钥数组
intlen_miwen;//密文长度intcount;记录密文在密钥中所在位置
程序流程
代码与代码分析
Function1:voidencrypt(charmingwen[],charmiyue[],charmiwen[])//加密函数
Calls:strlen();//判断明文长度,密钥长度;puts();//输出密文,getchar();//接受回车
Called By:intmain()//主函数调用
Input(type):mingwen[100],char型
Output(type):miwen[100],char型
Function2:voiddecrypt(charmiwen[],charmiyue[],charmingwen[])//解密函数
实验项目:实验一,第二题
实验要求
(内容)
单表替换密码
实验环境
Win7 64位,Visual studio(c语言环境)
实现功能
用户输入明文,输入26位不重复密钥,明文与密钥匹配得出密文。
明文与密钥通过单表替换加密,密文与密钥单表替换解密。
加密密钥大小写不敏感,输出明密文大小写转换;解密密钥大小写敏感,输入密钥只能与密文大小写相同。部分达到题目要求。
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;
j++;
}
printf("解密后的明文为:");
puts(mingwen);
getchar();
}
//维吉尼亚密码c.cpp :定义控制台应用程序的入口点。
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
#include "stdio.h"
#include "string.h"
void encrypt(char[],char[],char[]);
Others:密钥大小写不敏感
实验输入(可加截图):
结果输出(可加截图):
实验小结
1.数组初始化,即使在数组后面有输入,在声明后需要初始化,否则会在有效信息后输出现乱码。2.数组的输入输出。例如:scanf("%s",ming。4.Main()函数中getchar()回收回车。
Calls:strlen();//判断密文长度,密钥长度;puts();//输出明文,getchar();//接受回车
Called By:intmain()//主函数调用
Input(type):miwen[100],char型;miyue[100],char型
Output(type):mingwen[100],char型
Bug:1.未判断输入密钥输入是否正确(位数,是否有重复,是否都为字母);
2.解密:密文与密钥需要大小写一致。
实验输入(可加截图):
结果输出(可加截图):
实验小结
解密算法需要先判断密文在密钥的具体位置,然后在明文顺序中找到相应位置。
再判断第二个密文位置时,需要把记录密文位置的变量清零。
维吉尼亚密码代码
}
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[])
intlen_miyue;//密钥长度intlen_miwen;//密文长度
程序流程
代码与代码分析
Function1:voidencrypt(charmingwen[],charmiyue[],charmiwen[])//加密函数
Calls:strlen();//判断明文长度,密钥长度;puts();//输出密文,getchar();//接受回车
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'){//大写转小写
Calls:strlen();//判断密文长度,密钥长度;puts();//输出明文,getchar();//接受回车
Called By:intmain()//主函数调用
Input(type):miwen[100],char型
Output(type):mingwen[100],char型
Others:密钥大小写不敏感
void decrypt(char[],char[],char[]);
int main()
{
int caozuo;
char mingwen[100]="0";
char miwen[100]="0";
char miyue[100]="0";
printf("请选择加/解密操作:1加密,2解密:");
scanf("%d",&caozuo);
{
int i,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'){//小写转大写
}
getchar();//回收回车
}
void encrypt(char mingwen[],char miyue[],char miwen[])
{
int i,j,n,m,len_miyue,len_mingwen;
j=0;
len_miyue= strlen(miyue);
len_mingwen= strlen(mingwen);
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;
encrypt(mingwen,miyue,miwen);
}
else if(caozuo==2)
{
printf("请输入您的密文:");scanf("%s",miwen);
printf("请输入您的密钥:");scanf("%s",miyue);
decrypt(miwen,miyue,mingwen);
Called By:intmain()//主函数调用
Input(type):mingwen[100],char型;miyue[100],char型
Output(type):miwen[100],char型
Function2:voiddecrypt(charmiwen[],charmiyue[],charmingwen[])//解密函数
荐计算机上机实验内容及实验报告要求荐构建学校德育管理与评价体系的实验报告荐化学实验报告格式荐大学物理实验课程设计实验报告荐电路实验报告要求
云南大学软件学院
School of Software,YunnanUniversity
成绩
密码技术实验报告
密码技术实验报告
实验项目:实验一,第一题
实验要求
(内容)
while((caozuo!=1)&&(caozuo!=2))//错误判断
{
printf("输入错误,请从新选择:");
scanf("%d",&caozuo);
}
if(caozuo==1){
printf("请输入您的明文:");scanf("%s",mingwen);
printf("请输入您的密钥:");scanf("%s",miyue);
实现维吉尼亚密码
实验环境
Win7 64位,Visual studio(c语言环境)
实现功能
实现功能:明文与密钥通过维吉尼亚密码算法加密,密文与密钥通过维吉尼亚密码算法解密。密钥大小写不敏感,输出明密文大小写转换。达到题目要求
数据结构
intcaozuo;//用户选择加密/解密操作
charmingwen[100];//明文数组charmiwen[100];//密文数组charmiyue[100];//密钥数组
数据结构
intcaozuo;//用户选择加密/解密操作
charmingwen[100];//明文数组charmiwen[100];//密文数组charmiyue[26];//密钥数组
intlen_miwen;//密文长度intcount;记录密文在密钥中所在位置
程序流程
代码与代码分析
Function1:voidencrypt(charmingwen[],charmiyue[],charmiwen[])//加密函数
Calls:strlen();//判断明文长度,密钥长度;puts();//输出密文,getchar();//接受回车
Called By:intmain()//主函数调用
Input(type):mingwen[100],char型
Output(type):miwen[100],char型
Function2:voiddecrypt(charmiwen[],charmiyue[],charmingwen[])//解密函数
实验项目:实验一,第二题
实验要求
(内容)
单表替换密码
实验环境
Win7 64位,Visual studio(c语言环境)
实现功能
用户输入明文,输入26位不重复密钥,明文与密钥匹配得出密文。
明文与密钥通过单表替换加密,密文与密钥单表替换解密。
加密密钥大小写不敏感,输出明密文大小写转换;解密密钥大小写敏感,输入密钥只能与密文大小写相同。部分达到题目要求。
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;
j++;
}
printf("解密后的明文为:");
puts(mingwen);
getchar();
}
//维吉尼亚密码c.cpp :定义控制台应用程序的入口点。
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
#include "stdio.h"
#include "string.h"
void encrypt(char[],char[],char[]);
Others:密钥大小写不敏感
实验输入(可加截图):
结果输出(可加截图):
实验小结
1.数组初始化,即使在数组后面有输入,在声明后需要初始化,否则会在有效信息后输出现乱码。2.数组的输入输出。例如:scanf("%s",ming。4.Main()函数中getchar()回收回车。
Calls:strlen();//判断密文长度,密钥长度;puts();//输出明文,getchar();//接受回车
Called By:intmain()//主函数调用
Input(type):miwen[100],char型;miyue[100],char型
Output(type):mingwen[100],char型
Bug:1.未判断输入密钥输入是否正确(位数,是否有重复,是否都为字母);
2.解密:密文与密钥需要大小写一致。
实验输入(可加截图):
结果输出(可加截图):
实验小结
解密算法需要先判断密文在密钥的具体位置,然后在明文顺序中找到相应位置。
再判断第二个密文位置时,需要把记录密文位置的变量清零。
维吉尼亚密码代码
}
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[])
intlen_miyue;//密钥长度intlen_miwen;//密文长度
程序流程
代码与代码分析
Function1:voidencrypt(charmingwen[],charmiyue[],charmiwen[])//加密函数
Calls:strlen();//判断明文长度,密钥长度;puts();//输出密文,getchar();//接受回车