ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:271.12KB ,
资源ID:6643868      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6643868.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(文件加密.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

文件加密.docx

1、文件加密XXXXXXX大学程序设计 报告题 目: 文件加密 专 业 计算机科学与技术 学 生 姓 名 XXX 班 级 学 号 XXXXXXXX 指 导 教 师 XXXXX 指 导 单 位 计算机学院 日 期 2011-12-2 一:题目要求题目7文件加密1 系统的基本功能文件的传输有明文和密文两种。明文发送不安全,可以用程序实现文件内容的加密和解密操作。加密算法、密钥设计可以采用现有算法,也可以自己设计。2 要求1)从键盘输入需要加密的文件名称、所在路径、使用的密钥;对文件的字符进行加密后,加密的内容写入同一个目录下的新生成的文件中,该文件名自行定义;2)从键盘输入需要解密的文件名称、所在路径

2、、使用的密钥;对文件的字符进行解密后,解密后的内容写入同一个目录下的新生成的文件中,该文件名自行定义。3)允许不同的文件采用不同的密钥。2、需求分析(1)在屏幕上显示文件内容void printtxt(); 便于将加密前的文件内容和加密后的文件内容作比较,方便检验程序执行的是否正确。(2)加密函数void encode(); 对原文件中的字符串进行加密并将加密后的内容写入到自定义的加密文件夹中。加密时每个字符依次反复加上加密字符串(如4963287312)如果范围超过ASCALL码值的032(空格)-122(Z),则进行模运算(即N%122)例如:加密the(t)116+4, (h)104+9

3、, (e)107+6变为xqk(3)解密 void decode(); 对加密后的文件中的字符串进行解密,并将解密后的内容写入到自定义的文件中。解码过程与加密过程正好相反,即从第一个字符依次反复减去“4963287312”中的数字,若执行减法后得到一个负数,则把这个负数加122.即(N+122)其中N为负数。例如:把xqk解密(x)120-4, (q)111-9, (k)107-6变为 the(4)显示菜单:* 1.设置密钥 2.加密文件 3.解密文件 4.显示文件 5.退出*请选择输入15(5)加密方法用结构体表示 typedef struct password /*加密方法*/ char

4、ps50; /*加密字符串*/ long wd; /*加密的字节数*/ password; 三、概要设计 在程序设计中定义了两个全局变量,字符数组PS用来存放加密字符串,长整形变量wd用来记录加密的字节数的长度。并且定义了四个成员函数模块,分别实现不同的功能.程序的核心思想:一个对字符文件(由数字或字母组成)进行加密解密的程序。可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。例如加密时可以将选取内容的每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032(空格)122(z),则进行模运算(既N%122)。解密与加密的顺序相

5、反。4、详细设计1.对程序运行时的步骤大致可用流程图表示出来2.流程图大致如下: 1.设置密码函数void setkey();主要定义了以下变量: 1、FILE* pfile;/定义文件指针用于打开密钥路径下的文件夹; 2、char pathname50; /定义字符数组存放密钥路径; 3、password pw;/定义了一个结构体对象,用来应用全局变量wd;该成员函数主要功能是自己可以任意指定密钥的存放位置,并且向其文件中写入加密字符串;保存并关闭。2.加密函数void encode();主要定义了以下变量:1、 FILE *pfile, *pkey, *pefile;2、 char key

6、pathname50; /用来存放密钥完整路径3、 char filepathname50; /存放文件完整路径4、 char efilepathname50; /存放加密后文件完整路径5、 password key;/定义的结构体变量6、 password file;/定义的结构体变量7、 int i=0;/定义及初始化,便于函数中的循环运算关键代码: key.wd = fread(key.ps, 1, 50, pkey); /读取pkey所指文件(密钥文件)的内容到字符数组key.ps中 fflush(stdin);/清除缓存的作用 printf(请输入明文(字符串):); gets(fi

7、le.ps); file.wd = strlen(file.ps); fwrite(file.ps, 1, file.wd, pefile);/将加密前文件中的内容记录到字符数组file.ps中 for (i = 0; i != file.wd; +i) file.psi = (file.psi + key.psi - 48) % 122; 代码思想:开始,以输出方式打开加密文件,以输入的方式打开原始文件,判断文件是否为空,如果为空,则输出打开文件错误,若不为空,则将文件中的字符进行加密。请文件中字符所对应的ASCALL码值的032(空格)-122(Z),进行模运算(即N%122)将加密后的字

8、符写入加密文件。3.解密函数void decode(); FILE *pfile, *pkey, *pdfile; char keypathname50; char filepathname50; char dfilepathname50; password key; password file; int i;解密函数定义的变量和加密函数的变量类似,文件指针分别用于打开不同的文件,字符数组用来存放个文件的路径。关键代码: key.wd = fread(key.ps, 1, 50, pkey); file.wd = fread(file.ps, 1, 50, pfile); for (i = 0

9、; i != file.wd; +i) file.psi = (file.psi - key.psi + 48 + 122) % 122; fwrite(file.ps, 1, file.wd, pdfile);代码思想:开始,以输出方式打开解密文件,以输入方式打开加密文件,对加密后的文件中的字符串进行解密,即将字符所对应的ASCALL码减去加密字符串所对应的数字加上48,得到的就是解密后的字符。若执行减法后得到一个负数,把这个负数加122,即(N+122),其中N为负数。将解密后的字符写入解密文件,关闭打开的的两个文件,屏幕显示解码成功。4.显示函数void printtxt();该函数用来

10、显示加密前文件的内容和解密后文件内容作对比,看是否符合题意,方便读者进行比较。下面是完整的程序代码:#include #include typedef struct password /*加密方法*/ char ps50; /*存放加密字符串*/ long wd; /*加密的字节数*/password; /将password作为struct password的别名void printtxt(); /在屏幕上显示文件void encode(); /加密void decode(); /解密void setkey(); /设置密码void main() printf( 文件加密n); printf(

11、*n); printf( 1.设置密钥n); printf( 2.加密文件n); printf( 3.解密文件n); printf( 4.显示文件n); printf( 5.退出n); printf(*n); char choice; while (1) printf(请重新输入15:); fflush(stdin); scanf(%c, &choice); switch(choice) case 1: setkey(); break; case 2: encode(); break; case 3: decode(); break; case 4: printtxt(); break; ca

12、se 5: printf(谢谢使用!即将退出!n); return; void setkey() FILE* pfile; /定义文件指针 char pathname50; /定义字符数组存放密钥路径 password pw; fflush(stdin); /清除缓存 printf(密钥完整路径:); gets(pathname); if (pfile = fopen(pathname, w) = NULL)/以写的方式打开密钥文件,若不存在,则建立一个新的。 printf(打开文件错误!n); return; printf(请输入密码:); gets(pw.ps); /从键盘输入 pw.wd

13、 = strlen(pw.ps);/记录机密字符串的长度 fwrite(pw.ps, 1, pw.wd, pfile);/将当前pw.ps的内容写入pfile所指的文件中(即密钥文件) printf(密钥保存成功!n); fclose(pfile);void encode() /加密程序 FILE *pfile, *pkey, *pefile;/定义文件指针 char keypathname50; /密钥完整路径 char filepathname50; /文件完整路径 char efilepathname50; /加密后文件完整路径 password key; password file;

14、int i; fflush(stdin); /清除缓存 printf(获取密钥完整路径:); gets(keypathname); if (pkey = fopen(keypathname, r) = NULL)/以读的方式打开文件,该文件必须存在,否则,文件不能打开 printf(打开密钥错误!n); return; fflush(stdin); /清理缓存 printf(加密前文件完整路径:); gets(filepathname); /从键盘直接输入文件路径 if (pefile = fopen(filepathname, w) = NULL) printf(打开密钥错误!n); ret

15、urn; fflush(stdin); printf(加密后文件完整路径:); gets(efilepathname); if (pfile = fopen(efilepathname, w) = NULL) printf(打开文件错误!n); return; 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, fi

16、le.wd, pefile);/将加密前文件中的内容记录到字符数组file.ps中 for (i = 0; i != file.wd; +i) file.psi = (file.psi + key.psi - 48) % 122;/0的ASCALL码值为48,Z的ASCALL码值为122 fwrite(file.ps, 1, file.wd, pfile); /将加密后文件中的内容记录到字符数组file.ps中 printf(加密成功!n); fclose(pfile); fclose(pkey); fclose(pefile);void decode() /解密程序 FILE *pfile,

17、 *pkey, *pdfile; char keypathname50; /字符数组存放密钥完整路径 char filepathname50; /加密后文件完整路径 char dfilepathname50; /解密后完整路径 password key; password file; int i; fflush(stdin); printf(输入密钥完整路径:); gets(keypathname); if (pkey = fopen(keypathname, r) = NULL)/以读的方式打开密钥文件 printf(打开密钥错误!n); return; fflush(stdin); /清理

18、缓存 printf(加密后文件完整路径:); gets(filepathname); if (pfile = fopen(filepathname, r) = NULL)/以读的方式打开加密后文件 printf(打开文件错误!n); return; fflush(stdin); printf(解密后完整路径:); gets(dfilepathname); /从键盘输入解密后完整路径 if (pdfile = fopen(dfilepathname, w) = NULL) printf(打开文件错误!n); return; key.wd = fread(key.ps, 1, 50, pkey);

19、/ file.wd = fread(file.ps, 1, 50, pfile); for (i = 0; i != file.wd; +i) file.psi = (file.psi - key.psi + 48 + 122) % 122;/0的ASCALL码值为48,Z的ASCALL码值为122 fwrite(file.ps, 1, file.wd, pdfile); printf(解密成功!n); /printtxt(); file.psfile.wd = 0; /printf(解密后的明文:%sn, file.ps); fclose(pfile); fclose(pkey); fclo

20、se(pdfile);void printtxt() FILE* pfile; char filepathname50; password file; fflush(stdin); printf(原文件完整路径:); gets(filepathname); if (pfile = fopen(filepathname, r) = NULL) printf(打开原文件错误!n); return; file.wd = fread(file.ps, 1, 50, pfile); file.psfile.wd = 0; printf(原文件的明文:%sn, file.ps); printf(解密后的明

21、文:%sn, file.ps); fclose(pfile);5测试数据及其结果分析程序编译后的结果:1、存放密钥的文件 2、加密前文件及其内容3、加密后文件4、解密后的文件及其内容5、如果密钥的路径输入错误,则提示6.如果输入密钥文件时路径出错,指向一个空文本文件中,则改加密软件失效,即,加密前与加密后的文件中的内容一样。六调试过程中的问题 在这个编程中,如果你在设计时存在逻辑错误,虽然源代码没错,不过在运行时就有问题,在调试中前后函数的功能要对应,要不然就不能正确运行,还得注意文件的打开方式以及英文的大小写问题。七课程设计总计 经过这两周的程序设计,使我巩固了原有的理论知识,培养了我们灵活

22、运用和组合集成所学过的知识技能来分析,解决实际问题的能力。使我体会到了自身的知识能力能在实际中应用和发挥不但可以激发创新意识,还可以开发创造能力,养成独立思考问题的能力,经过这两周的学习使我受益非线。通过实习丰富了我对VC环境的经验,还应此接触了MFC,虽然最终没能做出成果,但起码熟悉了了其环境,更强了它的使用技巧。评 分 细 则评 分 项总分评分平时表现(20%)遵守机房规章制度5上机时的表现5学习态度10软件设计及其实现(45%)团队合作精神5程序准备情况5程序设计能力10软件设计合理性10用户界面设计5软件功能实现情况10报告(25%)报告书写规范程度10内容详实程度10文字表达熟练程度5答辩(10%)回答问题准确度10评分等级总评分评 语教师签名: 年 月 日备 注评分等级有五种:优秀、良好、中等、及格、不及格

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

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