实验1.docx

上传人:b****7 文档编号:10435716 上传时间:2023-02-11 格式:DOCX 页数:11 大小:348.27KB
下载 相关 举报
实验1.docx_第1页
第1页 / 共11页
实验1.docx_第2页
第2页 / 共11页
实验1.docx_第3页
第3页 / 共11页
实验1.docx_第4页
第4页 / 共11页
实验1.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验1.docx

《实验1.docx》由会员分享,可在线阅读,更多相关《实验1.docx(11页珍藏版)》请在冰豆网上搜索。

实验1.docx

实验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读取,是不足之处,下一次实验会有所改进。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1