实验1.docx
- 文档编号:10435716
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:11
- 大小:348.27KB
实验1.docx
《实验1.docx》由会员分享,可在线阅读,更多相关《实验1.docx(11页珍藏版)》请在冰豆网上搜索。
实验1
云南大学软件学院
SchoolofSoftware,YunnanUniversity
成绩
学期:
2015年秋季学期
课程名称:
密码技术
任课教师:
杨维忠
学生姓名:
学号:
实验项目:
实验一
联系电话:
电子邮件:
完成提交时间:
2015年10月日
密码技术实验报告
实验项目:
实验一,第一题
实验要求
(内容)
实现维吉尼亚密码,用键盘接收明文和密钥,屏幕打印密文和解密后的明文。
实验环境
操作系统:
Win764位操作系统
编译环境:
VisualStudio2013
实现功能
实现了维吉尼亚密码,用键盘接收明文和密钥,屏幕打印密文和解密后的明文。
达到了题目要求
数据结构
charpt[100],key[50],cip[100];//分别用来存储明文、密钥、密文
intn,p;//n用来存储密钥key的长度,p用来存储明文字符串长度。
程序流程
主函数main调用了两个函数:
Vigenere_encrypt和Vigenere_decrypt分别进行维吉尼亚密码的加解密。
Vigenere_encrypt的函数接口是charpt[],charkey[],charcip[],intn,intp;
Vigenere_decrypt的函数接口是charcip[],charkey[],charpt[],intn,intp
代码与代码分析
Function1:
voidVigenere_encrypt(charpt[],charkey[],charcip[],intn,intp)
实现的功能:
用维吉尼亚算法进行加密操作,函数接口就是传入的明文pt[],密钥key[],密文cip[],以及密钥长度n,明文长度p。
实现的主要思路:
将明文加上密钥再减去32即可得到密文的大写,判断若密文的ASCII码若大于了90,则减去26来处理。
calledby:
main函数
Input(type):
charpt[],charkey[],intn,intp
Output(type):
charcip[]
Return(type):
void无返回值
Function2:
voidVigenere_decrypt(charcip[],charkey[],charpt[],intn,intp)
实现的功能:
用维吉尼亚算法进行解密操作,函数接口就是传入的明文pt[],密钥key[],密文cip[],以及密钥长度n,明文长度p。
实现的主要思路:
将密文减去密钥再加上32即可得到明文的小写,判断若明文的ASCII码若小于了97,则加上26来处理。
calledby:
main函数
Input(type):
charcip[],charkey[],intn,intp
Output(type):
charpt[]
Return(type):
void无返回值
Function3:
intmain(intargc,char*argv[])
实现的功能:
通过调用函数Vigenere_encrypt和Vigenere_decrypt实现维吉尼亚加解密操作。
实现的主要思路:
先输入明文,密钥,对明文密钥求长度,再传入Vigenere_encrypt和Vigenere_decrypt两个函数中。
calls:
Vigenere_encrypt,Vigenere_decrypt
Input(type):
charpt[],charkey[]
Output(type):
charcip[],charpt[],
Return(type):
int
实验输入(可加截图):
结果输出(可加截图):
实验小结
收获:
刚开始做实验,回顾了C语言,熟悉了相关的C语言的函数调用
实验项目:
实验一,第二题
实验要求
(内容)
实现单表替换密码,用键盘接收明文和密钥,屏幕打印替换表和密文。
实验环境
操作系统:
Win764位操作系统
编译环境:
VisualStudio2013
实现功能
实现了单表替换密码,用键盘接收明文和密钥,屏幕打印替换表和密文。
达到了题目要求
数据结构
chark[26],plain[26],p[100],cipher[100];//k[26]用来保存扩展的密钥,plain[26]明文表,//p[100],cipher[100]分别为明密文
charkey[20];//输入的密钥
程序流程
主函数main调用了两个函数:
plaintable和key_to_k进行对密钥的扩展和替换表的初始化。
plaintable的函数接口是charplain[26];
key_to_k的函数接口是chark[],charkey[]。
代码与代码分析
Function1:
voidplaintable(charplain[26])
实现的功能:
实现一个字母表的创建
实现的主要思路:
将plain[0]赋值为a,此后的plain[1],plain[2]依次加一。
CalledBy:
main函数
Input(type)charplain[26]
Output(type):
charplain[26]
Return(type):
void无返回值
Function2:
voidkey_to_k(chark[],charkey[])
实现的功能:
实现输入的密钥扩展为不重复的26位字母
实现的主要思路:
将输入的密钥先去掉重复字母,剩下的按字母表顺序写下作为密钥。
CalledBy:
main函数
Input(type)charkey[]
Output(type):
chark[]
Return(type):
void无返回值
Function3:
main(intargc,char*argv[])
实现的功能:
实现单表替换密码加密,输出替换表和密文
实现的主要思路:
先输出替换表,再一一加密输出密文。
Calls:
plaintable(plain);key_to_k(k,key);
Input(type)charkey[],charp[]
Output(type):
charcipher[]
Return(type):
int
实验输入(可加截图):
结果输出(可加截图):
实验小结
本次实验最重要的也就是密钥的生成过程,将输入的密钥去掉重复字母,然后剩下的按字母表的顺序加入,生成替换表,然后一对一加密就行。
实验项目:
实验一,第三、四题
实验要求
(内容)
在实现1的基础上,用维吉尼亚密码实现控制台对英文文本文件,明文和密文都以文件形式存在的加解密
cipher-e/-dkeyinputfileoutputfile
在实现3的基础上,实现控制台对所有文件(中英文文本、符号甚至任意的文件)的加解密
实验环境
操作系统:
Win764位操作系统
编译环境:
VisualStudio2013
实现功能
用维吉尼亚密码实现了控制台对英文文本文件,明文和密文都以文件形式存在的加解密
在实现3的基础上,实现控制台对所有文件(中英文文本、符号甚至任意的文件)的加解密,
达到了题目要求
数据结构
clock_ta,b;//时钟
charkey[50],inputfile[50],outputfile[50];//密钥,两个文件路径文件名
char*pla,*text;//指向明文和密文的指针
FILE*fp1=NULL,*fp2=NULL;//文件指针
程序流程
main函数调用了Encryption和Decryption函数进行对任意文件的加解密操作,Encryption函数进行文件的加密操作,函数接口是:
charkey[],charplainpath[],charcipherpath[];
Decryption函数进行文件的解密操作,函数接口是:
charkey[],charcipherpath[],charplainpath[]
代码与代码分析
Function1:
voidEncryption(charkey[],charplainpath[],charcipherpath[])
主要功能:
实现文件的加密操作
主要实现思路:
1)打开文件,fread读取文件信息,为文件分配一个缓冲区保存信息
2)对缓冲区的数据进行加解密操作
3)再将操作后的数据用fwrite写入文件。
CalledBy:
main(intargc,char*argv[])
Input(type)charkey[],charplainpath[],charcipherpath[]
Return(type):
void
Function2:
voidDecryption(charkey[],charcipherpath[],charplainpath[])
主要功能:
实现文件的解密操作
主要实现思路:
1)首先打开文件,fread读取文件信息,为文件分配一个缓冲区保存信息
2)对缓冲区的数据进行加解密操作,再将操作后的数据用fwrite写入文件
CalledBy:
main(intargc,char*argv[])
Input(type)charkey[],charcipherpath[],charplainpath[]
Return(type):
void
Function3:
intmain(intargc,char*argv[])
主要功能:
实现对文件的加解密功能
主要实现思路:
输入-e/-d选择进行加密还是解密,输入密钥,输入两个文件路径及文件名调用Encryption、Decryption函数,实现对文件的加解密。
Calls:
Encryption、Decryption
Input(type)chark;charkey[50],inputfile[50],outputfile[50];
Output(type):
clock_t
Return(type):
int
实验输入(可加截图):
控制台实现加密:
控制台实现解密:
结果输出(可加截图):
实验小结
这次实验使用了fread、fwrite读写文件,实现了控制台下进行文件加解密。
但是对读取到的文件一次分配了所有的内存,没有使用按每次1M读取,是不足之处,下一次实验会有所改进。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验