文件加密Word文件下载.docx
- 文档编号:19657844
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:19
- 大小:271.12KB
文件加密Word文件下载.docx
《文件加密Word文件下载.docx》由会员分享,可在线阅读,更多相关《文件加密Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
加密时每个字符依次反复加上加密字符串(如4963287312)如果范围超过ASCALL码值的032(空格)-122(‘Z’),则进行模运算(即N%122)
例如:
加密the
(t)116+4,(h)104+9,(e)107+6
变为xqk
(3)解密voiddecode();
对加密后的文件中的字符串进行解密,并将解密后的内容写入到自定义的文件中。
解码过程与加密过程正好相反,即从第一个字符依次反复减去“4963287312”中的数字,若执行减法后得到一个负数,则把这个负数加122.即(N+122)其中N为负数。
把xqk解密
(x)120-4,(q)111-9,(k)107-6
变为the
(4)显示菜单:
*********************************
1.设置密钥
2.加密文件
3.解密文件
4.显示文件
5.退出
请选择输入1~5
(5)加密方法用结构体表示
typedefstructpassword/*加密方法*/
{
charps[50];
/*加密字符串*/
longwd;
/*加密的字节数*/
}password;
三、概要设计
在程序设计中定义了两个全局变量,字符数组PS用来存放加密字符串,长整形变量wd用来记录加密的字节数的长度。
并且定义了四个成员函数模块,分别实现不同的功能.
程序的核心思想:
一个对字符文件(由数字或字母组成)进行加密解密的程序。
可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。
例如加密时可以将选取内容的每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(既N%122)。
解密与加密的顺序相反。
4、详细设计
1.对程序运行时的步骤大致可用流程图表示出来
2.流程图大致如下:
1.设置密码函数voidsetkey();
主要定义了以下变量:
1、FILE*pfile;
//定义文件指针用于打开密钥路径下的文件夹;
2、charpathname[50];
//定义字符数组存放密钥路径;
3、passwordpw;
//定义了一个结构体对象,用来应用全局变量wd;
该成员函数主要功能是自己可以任意指定密钥的存放位置,并且向其文件中写入加密字符串;
保存并关闭。
2.加密函数voidencode();
1、FILE*pfile,*pkey,*pefile;
2、charkeypathname[50];
//用来存放密钥完整路径
3、charfilepathname[50];
//存放文件完整路径
4、charefilepathname[50];
//存放加密后文件完整路径
5、passwordkey;
//定义的结构体变量
6、passwordfile;
7、inti=0;
//定义及初始化,便于函数中的循环运算
关键代码:
key.wd=fread(key.ps,1,50,pkey);
//读取pkey所指文件(密钥文件)的内容到字符数组key.ps中
fflush(stdin);
//清除缓存的作用
printf("
请输入明文(字符串):
"
);
gets(file.ps);
file.wd=strlen(file.ps);
fwrite(file.ps,1,file.wd,pefile);
////将加密前文件中的内容记录到字符数组file.ps中
for(i=0;
i!
=file.wd;
++i)
{
file.ps[i]=(file.ps[i]+key.ps[i]-48)%122;
}
代码思想:
开始,以输出方式打开加密文件,以输入的方式打开原始文件,判断文件是否为空,如果为空,则输出打开文件错误,若不为空,则将文件中的字符进行加密。
请文件中字符所对应的ASCALL码值的032(空格)-122(‘Z’),进行模运算(即N%122)将加密后的字符写入加密文件。
3.解密函数voiddecode();
FILE*pfile,*pkey,*pdfile;
charkeypathname[50];
charfilepathname[50];
chardfilepathname[50];
passwordkey;
passwordfile;
inti;
解密函数定义的变量和加密函数的变量类似,文件指针分别用于打开不同的文件,字符数组用来存放个文件的路径。
file.wd=fread(file.ps,1,50,pfile);
file.ps[i]=(file.ps[i]-key.ps[i]+48+122)%122;
fwrite(file.ps,1,file.wd,pdfile);
开始,以输出方式打开解密文件,以输入方式打开加密文件,对加密后的文件中的字符串进行解密,即将字符所对应的ASCALL码减去加密字符串所对应的数字加上48,得到的就是解密后的字符。
若执行减法后得到一个负数,把这个负数加122,即(N+122),其中N为负数。
将解密后的字符写入解密文件,关闭打开的的两个文件,屏幕显示解码成功。
4.显示函数voidprinttxt();
该函数用来显示加密前文件的内容和解密后文件内容作对比,看是否符合题意,方便读者进行比较。
下面是完整的程序代码:
#include<
stdio.h>
string.h>
typedefstructpassword/*加密方法*/
/*存放加密字符串*/
}password;
//将password作为structpassword的别名
voidprinttxt();
//在屏幕上显示文件
voidencode();
//加密
voiddecode();
//解密
voidsetkey();
//设置密码
voidmain()
文件加密\n"
*********************************\n"
1.设置密钥\n"
2.加密文件\n"
3.解密文件\n"
4.显示文件\n"
5.退出\n"
charchoice;
while
(1)
printf("
请重新输入1~5:
fflush(stdin);
scanf("
%c"
&
choice);
switch(choice)
{
case'
1'
:
setkey();
break;
2'
encode();
3'
decode();
4'
printtxt();
5'
printf("
谢谢使用!
即将退出!
\n"
return;
}
}
voidsetkey()
FILE*pfile;
//定义文件指针
charpathname[50];
//定义字符数组存放密钥路径
passwordpw;
//清除缓存
密钥完整路径:
gets(pathname);
if((pfile=fopen(pathname,"
w"
))==NULL)//以写的方式打开密钥文件,若不存在,则建立一个新的。
打开文件错误!
return;
请输入密码:
gets(pw.ps);
//从键盘输入
pw.wd=strlen(pw.ps);
//记录机密字符串的长度
fwrite(pw.ps,1,pw.wd,pfile);
//将当前pw.ps的内容写入pfile所指的文件中(即密钥文件)
密钥保存成功!
fclose(pfile);
voidencode()//加密程序
FILE*pfile,*pkey,*pefile;
//定义文件指针
//密钥完整路径
//文件完整路径
charefilepathname[50];
//加密后文件完整路径
获取密钥完整路径:
gets(keypathname);
if((pkey=fopen(keypathname,"
r"
))==NULL)//以读的方式打开文件,该文件必须存在,否则,文件不能打开
打开密钥错误!
//清理缓存
加密前文件完整路径:
gets(filepathname);
//从键盘直接输入文件路径
if((pefile=fopen(filepathname,"
))==NULL)
加密后文件完整路径:
gets(efilepathname);
if((pfile=fopen(efilepathname,"
//读取pkey所指文件(密钥文件)的内容到字符数组key.ps中
//将加密前文件中的内容记录到字符数组file.ps中
//'
0'
的ASCALL码值为48,'
Z'
的ASCALL码值为122
fwrite(file.ps,1,file.wd,pfile);
//将加密后文件中的内容记录到字符数组file.ps中
加密成功!
fclose(pkey);
fclose(pefile);
voiddecode()//解密程序
//字符数组存放密钥完整路径
//解密后完整路径
输入密钥完整路径:
))==NULL)//以读的方式打开密钥文件
if((pfile=fopen(filepathname,"
))==NULL)//以读的方式打开加密后文件
解密后完整路径:
gets(dfilepathname);
//从键盘输入解密后完整路径
if((pdfile=fopen(dfilepathname,"
//
解密成功!
//printtxt();
file.ps[file.wd]='
\0'
;
//printf("
解密后的明文:
%s\n"
file.ps);
fclose(pdfile);
voidprinttxt()
原文件完整路径:
打开原文件错误!
原文件的明文:
5.测试数据及其结果分析
程序编译后的结果:
1、存放密钥的文件
2、加密前文件及其内容
3、加密后文件
4、解密后的文件及其内容
5、如果密钥的路径输入错误,则提示
6.如果输入密钥文件时路径出错,指向一个空文本文件中,则改加密软件失效,即,加密前与加密后的文件中的内容一样。
六.调试过程中的问题
在这个编程中,如果你在设计时存在逻辑错误,虽然源代码没错,不过在运行时就有问题,在调试中前后函数的功能要对应,要不然就不能正确运行,还得注意文件的打开方式以及英文的大小写问题。
七.课程设计总计
经过这两周的程序设计,使我巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过的知识技能来分析,解决实际问题的能力。
使我体会到了自身的知识能力能在实际中应用和发挥不但可以激发创新意识,还可以开发创造能力,养成独立思考问题的能力,经过这两周的学习使我受益非线。
通过实习丰富了我对VC环境的经验,还应此接触了MFC,虽然最终没能做出成果,但起码熟悉了了其环境,更强了它的使用技巧。
评分细则
评分项
总分
评分
平时表现(20%)
遵守机房规章制度
5
上机时的表现
学习态度
10
软件设计
及其实现
(45%)
团队合作精神
程序准备情况
程序设计能力
软件设计合理性
用户界面设计
软件功能实现情况
报告
(25%)
报告书写规范程度
内容详实程度
文字表达熟练程度
答辩(10%)
回答问题准确度
评分等级
总评分
评语
教师签名:
年月日
备注
评分等级有五种:
优秀、良好、中等、及格、不及格
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文件 加密