为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

密码技术实验报告

2020-03-09 11页 doc 48KB 14阅读

用户头像

is_882336

暂无简介

举报
密码技术实验报告课程名称:          密码技术        实验一            密码技术实验报告 实验项目:实验一,第一题 实验要求 (内容) 实现维吉尼亚密码 实验环境 Win7 64位,Visual studio(c语言环境) 实现功能 实现功能:明文与密钥通过维吉尼亚密码算法加密,密文与密钥通过维吉尼亚密码算法解密。密钥大小写不敏感,输出明密文大小写转换。达到题目要求 数据结构 int caozuo;//用户选择加密/解密操作 char mingwen[100];//明文数组 ...
密码技术实验报告
课程名称:          密码技术        实验一            密码技术实验 实验项目:实验一,第一题 实验要求 () 实现维吉尼亚密码 实验环境 Win7 64位,Visual studio(c语言环境) 实现功能 实现功能:明文与密钥通过维吉尼亚密码算法加密,密文与密钥通过维吉尼亚密码算法解密。密钥大小写不敏感,输出明密文大小写转换。达到题目要求 数据结构 int caozuo;//用户选择加密/解密操作 char mingwen[100];//明文数组 char miwen[100];//密文数组 char miyue[100];//密钥数组 int len_miyue;//密钥长度 int len_miwen;//密文长度 程序流程 代码与代码分析 Function1: void encrypt(char mingwen[],char miyue[],char miwen[])//加密函数 Calls: strlen();//判断明文长度,密钥长度; puts();//输出密文,getchar();//接受回车 Called By: int main()//主函数调用 Input(type) :mingwen[100],char型;miyue[100],char型 Output(type):miwen[100],char型 Function2: void decrypt(char miwen[],char miyue[],char mingwen[])//解密函数 Calls: strlen();//判断密文长度,密钥长度; puts();//输出明文,getchar();//接受回车 Called By: int main()//主函数调用 Input(type) :miwen[100],char型;miyue[100],char型 Output(type):mingwen[100],char型 Others:密钥大小写不敏感 实验输入(可加截图): 结果输出(可加截图): 实验小结 1.数组初始化,即使在数组后面有输入,在声明后需要初始化,否则会在有效信息后输出现乱码。2.数组的输入输出。例如:scanf("%s",mingwen);puts(mingwen)。3.调用函数的声明。4.Main()函数中getchar()回收回车。     实验项目:实验一,第二题 实验要求 (内容) 单表替换密码 实验环境 Win7 64位,Visual studio(c语言环境) 实现功能 用户输入明文,输入26位不重复密钥,明文与密钥匹配得出密文。 明文与密钥通过单表替换加密,密文与密钥单表替换解密。 加密密钥大小写不敏感,输出明密文大小写转换;解密密钥大小写敏感,输入密钥只能与密文大小写相同。部分达到题目要求。 数据结构 int caozuo;//用户选择加密/解密操作 char mingwen[100];//明文数组 char miwen[100];//密文数组 char miyue[26];//密钥数组 int len_miwen;//密文长度 int count;记录密文在密钥中所在位置 程序流程 代码与代码分析 Function1: void encrypt(char mingwen[],char miyue[],char miwen[])//加密函数 Calls: strlen();//判断明文长度,密钥长度; puts();//输出密文,getchar();//接受回车 Called By: int main()//主函数调用 Input(type) :mingwen[100],char型 Output(type):miwen[100],char型 Function2: void decrypt(char miwen[],char miyue[],char mingwen[])//解密函数 Calls: strlen();//判断密文长度,密钥长度; puts();//输出明文,getchar();//接受回车 Called By: int main()//主函数调用 Input(type) :miwen[100],char型 Output(type):mingwen[100],char型 Others:密钥大小写不敏感 Bug:1.未判断输入密钥输入是否正确(位数,是否有重复,是否都为字母); 2.解密:密文与密钥需要大小写一致。 实验输入(可加截图): 结果输出(可加截图): 实验小结 解密算法需要先判断密文在密钥的具体位置,然后在明文顺序中找到相应位置。 再判断第二个密文位置时,需要把记录密文位置的变量清零。     维吉尼亚密码代码 // 维吉尼亚密码c.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } #include "stdio.h" #include "string.h" void encrypt(char[],char[],char[]); 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); 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[]) { int i,j,n,m,len_miyue,len_mingwen; j=0; len_miyue= strlen(miyue); len_mingwen= strlen(mingwen); for(i=0;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[]) { int i,j,n,m,len_miyue,len_miwen; j=0; len_miyue= strlen(miyue); len_miwen= strlen(miwen); for(i=0;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(); }
/
本文档为【密码技术实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索