数据结构课程设计Word格式文档下载.docx
《数据结构课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
加密函数可描述为:
M=P+key;
对应的解密函数可描述为P=M-key;
其中P表示8位的明文数据,M表示8位的明文数据。
系统要求提供一个字符菜单界面,可以对任意格式的文件进行加密/解密。
二、基本要求
1,实现一个简易的文件加密/解密系统。
2,给出自定义的加密解密算法。
3,系统流程规范,可实现系统操作。
三、工具/准备工作
硬件:
Windowsxp或7操作系统的计算机;
软件:
MicrosoftVisualC++6.0;
准备工作:
安装MicrosoftVisualC++6.0;
四、分析与实现
对称加密体制是一种传统而经典的加密体制策略,多为对称加密体制即加密方A和解密方B共享一个Key.加密方A使用该密钥Key对要进行的文件进行加密操作。
从而生成密文;
解密方使用Key对文件进行解密操作从而形成明文。
如图1所示。
Key
明文
密文
加密方A图1对称密码体制示意解密方B
一、概要设计
简易加密解密文件系统结构示意图2
简易文件加密/解密系统
文件加密
文件解密
系统菜单
图2文件加密/解密系统的结构功能图
图2所示,该文件主要是有3个模块组成的----------文件加密,文件解密和系统菜单。
按照自顶向下,按步求精的顺序,又可将文件的加密和解密系统继续划分。
如图3所示。
文件加密子模块划分
文件解密子模块划分
如图3所示可将文件的加密/解密2个模块继续继续划分,其中读入明文是指将用户磁盘上的文件读入缓存区,准备加密。
加密明文是指将内存中的明文加密,然后在回到内存中的缓冲区中,这个过程中需要用户指定密钥。
保存密文是指将内存缓冲区中的密文数据以文件的形式保存在用户指定的文件夹下。
“文件解密”的第三个模块的功能刚好与“文件加密”的功能相反,但是操作基本是一致的,只是加密/解密的函数算法有区别,因此可以最大限度的复用代码。
二.详细设计
对应上述划分的6个子模块,可以分别映射为函数来使用。
但是有些模块的操作是完全一致的,因此可以最大限度的复用代码。
将“读入明文”模块中的和“读入密文”合并为一个模块---------“读入源文件”模块,因为他们的操作都是一样的。
都是讲用户指定磁盘上的文件读入到内存中,读入源文件的函数定义如下:
intopenSrcFile(char**buffer)
{
FILE*myfile_src;
/*源文件指针*/
charfilename[20];
/*文件名数组*/
longfile_size;
/*记录文件的长度*/
printf("
Pleaseinputthepathandfilenameofthefileyouwanttoprocess\n"
);
scanf("
%s"
filename);
if(!
(myfile_src=fopen(filename,"
rb"
)))
{
printf("
ERROR!
"
}
fseek(myfile_src,0,SEEK_END);
file_size=ftell(myfile_src);
fseek(myfile_src,0,SEEK_SET);
*buffer=(char*)malloc(file_size);
fread(*buffer,1,file_size,myfile_src);
/*读入文件*/
fclose(myfile_src);
returnfile_size;
}
数中定义一个指向字符型变量的指针char*buffer,然后造函数openSrcFile()中开辟内存缓冲区,将指定目录下的文件(明文件或者密文件)读入缓冲区中。
该缓冲区的首地址是buffer,这样可以通过该参数直接修改主调函数中的指针变量buffer。
该函数的返回值为读入的文件(明文或者密文)的长度。
文件加密函数定义如下:
voidencryption(charbuffer[],intfile_size,intkey)
inti;
for(i=0;
i<
file_size;
i++)
buffer[i]=buffer[i]+key;
/*M=2*(P+key)*/
该函数将缓冲区buffer中储存的明文进行加密,并将密文存放于缓冲区中,参数file_size为文件的长度。
Key为用户的输入的密钥。
voiddecryption(charbuffer[],intfile_size,intkey)
buffer[i]=buffer[i]-key;
该函数将缓冲区buffer中储存的密文进行解密,并将明文存放于缓冲区之中。
参数file_size为文件的长度,key为用户输入的密码。
并将“保存密文”模块与“保存明文”模块合并成-----------“保存目标文件”模块,因为他们的操作系统是一样的,都是讲缓冲区中的buffer中的数据(明文数据或者密文数据)保存在指定的文件目录上。
保存在目标文件的函数定义如下:
voidsaveDstFile(char*buffer,longfile_size)
FILE*myfile_dst;
Pleaseinputthepathandfilenameofthefileyouhaveprocessed\n"
(myfile_dst=fopen(filename,"
wb"
fwrite(buffer,1,file_size,myfile_dst);
OK"
fclose(myfile_dst);
调用函数saveDstFile()时,主调函数(调用函数saveDstFile的函数)中定义的指针buffer指向缓冲区中已存在处理好的数据(明文数据或密文数据)。
通过函数saveDstFile只是将缓冲区buffer中的内容写到用户自定义的文件夹中去。
参数file_size为文件的长度,即缓冲区buffer的长度。
将上述函数通过一个函数Process()整合在一起,函数Process()由主函数main()调用。
函数Process()的定义如下:
viodProcess(inta)
char*buffer;
intkey;
/*记录文件的长度*/
file_size=openSrcFile(&
buffer);
/*读入源文件*/
Pleaseinputthekey(ainteger)forencryptionordecryption\n"
%d"
&
key);
/*用户输入密钥*/
if(a==0)
/*加密状态*/
encryption(buffer,file_size,key);
else
/*解密状态*/
decryption(buffer,file_size,key);
saveDstFile(buffer,file_size);
函数Process()的参数由用户指定,当参数a等于0时为加密模式。
当a等于1时为解密模式。
对文件(明文文件或者密文文件)的操作由函数openAreFile()来完成,对文件进行不同的处理,主函数main()的定义如下:
main()
charflag;
menu();
flag=getchar();
getchar();
while(flag!
='
Q'
)
switch(flag)
{
case'
E'
:
Process(0);
break;
D'
Process
(1);
default:
printf("
InputError!
\n"
}
flag=getchar();
getchar();
整个程序调用关系结构如图4所示。
有一下几点值得指出:
1.这个“简易加密解密系统”的设计程序遵循了“自顶向下的分析”和“自低向上的设计”的原则。
2.题目中给定的加密函数M=P+key和解密函数M=P-key是不安全的,也不具有实用性,这里之所以使用是为了简化题目。
在实际加密/解密系统中,都是以更长的二进制位(64位.128位等)作为加密工具。
不存在本题中的8位长度,故实际生活中密钥的长度会随之增加。
3.本题只为了了解怎么使用“对称密码体制”的基本思想,通过这个程序简要的说出软件的沟图思想。
五.附件
以下为“简易解密/加密系统”的源代码。
(完整)
#include"
stdio.h"
voidencryption(charbuffer[],intfile_size,intkey);
voiddecryption(charbuffer[],intfile_size,intkey);
voidProcess(inta);
intopenSrcFile(char**buffer);
voidsaveDstFile(char*buffer);
voidmenu();
voidmenu()
*****************************************************************\n"
=========ASIMPLEENCRYPTION/DECRYPTIONSYSTEM=========\n"
ENCRYPTIONpress'
DECRYPTIONpress'
QUITpress'
\n"
);
程序运行界面如图5所示:
图-5
如图5所示在程序中输入字母E表示进入加密模式,按照提示首先输入明文件的路径名字,然后输入密钥,最后密文保存的路径和文件名,当程序出现OK时则说明加密成功。
然后是D进入解密模式同样的办法,出现OK则表示解密成功。
反之则是解密失败。
加密前明文C:
\\test.txt的内容如图6.。
图-6
加密后密文C:
\\a.txt的内容(乱码)如图-7所示。
图-7
解密后成功的文件C:
\\a.txt内容如图-8所示。
图-8
六.心得体会
通过本软件的使用,使我深刻体会到C语言的全面性,实用性和安全性。
通过对文件系统的加减密程序,我学会了对基本文件的加减密码。
同时能自己给出一个简单key,来给文件进行基本的加减密码。
一定程度的增加了自己电脑文档的安全性。