当前位置:文档之家› C语言程序设计-文件加密

C语言程序设计-文件加密

C语言程序设计-文件加密
C语言程序设计-文件加密

C语言程序设计课程设计报告

学期: 2014-2015(1)

班级:计科14-1 学号:1060314014039

1060314014041

组员姓名:张浩刘润龙

指导教师:李竹林

完成日期: 2014 年 12 月

文件加密与解密

一、设计目的:

通过对文件的加密保护与解密,使我们能更好的掌握好高级语言程序,从而了解对程序设计的基本概念和方法,进而学会利用C语言解决一般应用问题,并为后续的专业学习奠定基础。同时增强同学们之间的团队合作精神,使我们更好的融入社会,将来成为社会有用之才!

二、设计内容:

将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对

应字符进行移位操作即可,解密时移动相反。

例如:加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后移动5位(注:z后接a)可

得到密文(乱码)fghijkl;对该文件解密:文件内容为fghijk1,密钥为5,则有fghijk1每个字母向前

移动5位(注a后接z),可得到原文abcdef。

三、设计安排:

第一阶段:选择课程设计的题目

第二阶段:搜寻有关课程设计的资料,查阅相关的书籍

第三阶段:开始编写C语言程序

第四阶段:完成C语言程序的编写,开始撰写C语言课程设计报告

第五阶段:完成C语言课程设计报告的撰写

四、组员分工:

文件的加密、解密程序部分由张浩同学负责。课程设计报告,资料查询和程序调试修改由刘润龙同学负责,最后共同总结学习体会与心得。

五、总体方案的设计思想及说明:

1.主要思想:

为由总到分,由上到下的逐级分配任务的思想。通过主函数调用各个被调用的函数,再由被调用函数通过多个循环嵌套的使用实现各自的功能,最终达到程序的要求。

2.程序说明:

(1)主函数其中包括:输入函数input(),加密函数jiami(),解密函数jiemi(),显示函数

show(),。

(2)输入函数中:while((c=getchar())!=EOF)的使用能提示使用者结束的命令,并且通过fputc(c,fp)把一个字符c写到由文件指针fp指定的磁盘文件上。

(3)加密函数中:先定义两个指针,将输入的文件内容通过fputc(c+1,fp1);进行加密并保存到fp1所指定的文件上。

(4)解密函数中:在进入解密系统时,需先输入解密密码,然后在打开文件进行文件里内容解密。根据加密时对每个文件内容的加密操作,所以解密时只需按照相同方法反操作即可。

六、源程序:

#include

#include

#include

#include

#include

#define N 30 /*文件名字符串数组大小* /

#define M 30 /* 解密码字符串数组大小*/

#define E 500 /*数组大小 */

void menu(void); /*主菜单 */

void input(void); /*输入数据的函数*/

void jiami(void); /*对输入数据加密的函数*/

void jiemi(void); /*对已加密内容进行解密的函数 */

void show(void); /*显示内容的函数*/

int judge(void); /*判断是否要继续的函数*/

char code[]="2011810063"; /*设置进入解密系统所需的密码*/

main()

{

int num;

while(1)

{

menu();

flushall();

scanf("%d", &num);

switch(num)

{

case 0:

printf("\n");

exit(0);

case 1: system("cls");

input();

break;

case 2: system("cls");

jiami();

break;

case 3: system("cls");

jiemi();

break;

case 4: system("cls");

show();

break;

case 5: system("cls");

count1();

break;

case 6: system("cls");

count2();

break;

default:

printf("\n\t输入错误,请按规范重新输入!");

break;

}

getch(); /* 等待数据输入,使界面停留*/

}

}

void menu(void)

{

printf("\n\n\n\n\t**************************************************\n"); printf("\t**\n");

printf("\t* 1--输入 2--加密 3--解密 4--显示0--退出 *\n");

printf("\t**\n");

printf("\t********************************************************\n"); printf("\n\n\t 0. 退出系统。\n");

printf("\t 1. 输入信息,并写入文本文件。\n");

printf("\t 2. 对给定的文件进行加密。\n");

printf("\t 3. 对给定的文件进行解密。\n");

printf("\t 4. 显示文本文件的内容。\n");

printf("\n\t 请选择(0--4):");

}

void input(void)

{

int n=1;

FILE *fp;

char c, fname[N];

while(n)

{

printf("\n请输入文件名:\n");

scanf("%s",fname);

if ((fp=fopen(fname,"w")) == NULL)

{

printf("文件打不开!\n");

exit(0);

}

Else

{

printf("请输入文件内容:(若结束请按ctrl+z)\n");

while((c=getchar())!=EOF) /* 输入文件的内容,以ctrl+z结束*/ fputc(c,fp);

fclose(fp);

}

printf("文档输入并保存成功!\n");

printf("\n若继续创建文档,请输Y或y...");

n=judge(); /*退出解密系统*/

}

}

void jiami(void)

{

int n=1;

FILE *fp,*fp1;

char c,fname[M];

while(n)

{

printf("\n请输入要加密的文件名称:\n");

scanf("%s",fname);

if ((fp=fopen(fname,"r")) == NULL)

{

printf("\n无法打开文件!\n若重新输入,请输Y或y...");

n=judge(); //退出

}

if ((fp1=fopen("jiami.txt","w"))==NULL)

{

printf("无法打开文件!\n");

exit(0);

}

while((c=fgetc(fp))!=EOF) /*按ctrl+z结束*/

{

fputc(c+1,fp1); // 加密

putchar(c+1);

}

fclose(fp1);

fclose(fp);

remove(fname); /* 删除被加密的原文件*/

rename("jiami.txt",fname); /* 加密后的文件名更改为原文件名*/ printf("\n文档加密并保存成功!\n");

printf("\n\n是否继续加密?若继续请按Y或y...\n");

n=judge(); /*退出*/

}

}

void jiemi(void)

{

int n=1;

FILE *fp,*fp1;

char c, fname[M],code1[M];

while(n)

{

printf("\n请输入进入解密系统所需密码:");

scanf("%s",code1);

if(strcmp(code1,code)==0) /*比较字符串大小是否相等*/

{

while(n)

{

printf("\n请输入要解密的文件名:");

scanf("%s",fname);

if ((fp=fopen(fname,"r")) == NULL)

{

printf("\n文件打不开\n");

exit(0);

}

if ((fp1=fopen("jiemi.txt","w"))==NULL) {

printf("无法打开文件!\n");

exit(0);

}

while((c=fgetc(fp))!=EOF)

{

fputc(c-1,fp1); /*解密*/

putchar(c-1);

}

fclose(fp1);

fclose(fp);

remove(fname); /* 删除被解密的原文件*/

rename("jiemi.txt",fname); /*解密后的文件名更改为原文件名*/ printf("\n是否继续解密?若继续请按Y或y...");

n=judge(); /*退出*/

}

}

else {

printf("\n输入密码有误!请重新输入...\n");

}

}

}

void show(void)

{

int n=1;

FILE *fp;

char fname[M];

while(n)

{

printf("\n请输入要显示的文件名称:");

scanf("%s",fname);

if ((fp=fopen(fname,"r"))==NULL)

{

printf("\n文件打不开,若要继续输入请按Y或y...");

n=judge(); /*继续*/

}

Else

{

printf("\n%s的内容是:\n\n",fname);

while(!feof(fp)) /*判断是否是文件末尾*/

putchar(fgetc(fp)); /*显示文件内容*/

printf("\n");

fclose (fp);

printf("若要继续显示文件,请按Y或y..."); n=judge(); /*退出*/

}

}

}

1.输入文件内容界面

2.文件加密界面

(2)显示解密文件

七、实验总结:

1.把程序写成小函数的集合,有助于程序编写、调试、维护和修改的方便。

2.在相关性不是很大的语句之间可以使用空行隔开,有利于区分各个语句的具体作用,在修改程序时起到一定的作用,提高了程序的可读性。

3.在switch语句中未加getch();使得界面不会停留,直接跳回主菜单界面。

4.在输入文件时,语句scanf("%s",fname);中的%s误写成%c,导致输入错误。

5.在对文件操作时需要注意关闭文件的操作,假如没有关闭,将会使在运行程序之时,不能对文件进行删除或者重命名的操作。导致一些未知错误。

6.要及时使用清屏函数清除键盘缓冲区的文件及数据流,否则会导致不必要的错误。

7.在编写解密程序时,要注意使用两个while进行嵌套,使得在判断是否输入密码正确后,再判断解密的文件及是否继续解密其他文件。

8.通过这次的课程设计,我明白了,不管多么复杂的程序,其实都是有许许多多的小集合体组成的,只要肯花时间,肯认真,在编写程序的实践中,终将会将一系列的问题解决,从而达到目的,提高自己的能力,实践是检验真理的唯一标准!

八、个人收获与体会:

组员:张浩

通过这次的作业我觉得最大的收获是不仅把平时学习到的知识理解的更加透彻,而且使知识更加系统化,同时还把有些平时不太注意的小问题发现了出来,这不但有利于我学习C语言,而且对于我学习任何一门课程都是很有益处的。总之,做这份作业对于我们学习C语言有很大的帮助。

在做课程设计时,由于运用了很多新知识,新的方法,还有题目更加复杂,应用性更强,在编写过程中遇到了很多困难,幸好我们有团结的集体,通过大家的努力、配合,我们将问题逐个解决,最终成功的完成了作业,对c语言有了进一步理解,这对我们说意义是相当重大的,在此感谢我组同学的支持和老师的帮

助和指导。

经过这次的学习、设计,我们学到了许多以前不懂的、难懂的知识。这真是锻炼人的好机会,我很喜欢这种应用性的学习。我要感谢我的老师、我的伙伴,你们使我懂得了许多、许多。

组员:刘润龙

在这次和同组人一起设计程序过程中,我深刻体会到一个人的力量是渺小的,只有大家同心协力,才能完成好一项工作。在设计统计块时,开始遇到了不少困难。如:在写程序时,因为对数组,指针不熟悉,而出现了不少错误。经过学习,讨论,最后克服了这些困难。

经过这次设计,我对数组,指针的知识和使用又上了一个台阶。数组和指针那么地方便,它真是C语言的重点,精华所在。所以,在以后的学习中,我更应抓紧对指针的学习。

我想有了这样一次体验,在以后漫长的人生路上,

我们在面对许多意想不到的困难与挫折时,我们会更从容的去面对。通过这次合作,我使自己的动手能力和与人沟通的能力得到了提高,这将使我在以后的的道路上走的更稳,收获更多。所以,我们应感谢老师的良苦用心。同时我也知道了我们随时都要培养自己的动手能力,只有这样,才能更好的适应这个日新月异的飞速发展的社会。

RSA加密算法_源代码__C语言实现

RSA算法 1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。 RSA的安全性依赖于大数难于分解这一特点。公钥和私钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。 密钥对的产生。选择两个大素数,p 和q 。计算:n = p * q 然后随机选择加密密钥e,要求e 和( p - 1 ) * ( q - 1 )互质。最后,利用Euclid 算法计算解密密钥d, 满足e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q 不再需要,应该丢弃,不要让任何人知道。加密信息m(二进制表示)时,首先把m分成等长数据块m1 ,m2,..., mi ,块长s,其中2^s <= n, s 尽可能的大。对应的密文是:ci = mi^e ( mod n ) ( a ) 解密时作如下计算:mi = ci^d ( mod n ) ( b ) RSA 可用于数字签名,方案是用( a ) 式签名,( b )式验证。具体操作时考虑到安全性和m信息量较大等因素,一般是先作HASH 运算。RSA 的安全性。RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA 就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。 */ #include #include #include

RC4加密算法C语言实现

RC4 加密算法 C 语言实现 代码文件名 RC4.cpp Encrypt.h (代码详见后文) 备注:将以上两个文件放在相同的路径(建议不要放在中文路径 下)编译执行!编译环境 Microsoft Visual C++ 6.0 C-Free 5.0 代码解释 RC4 加密算法是大名鼎鼎的RSA 三人组中的头号人物Ron Rivest 在1987 年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box 长度可为任意,但一般为256字节。该算法的速度可以达到DES 加密的10倍左右。 RC4 算法的原理很简单,包括初始化算法和伪随机子密码生成算法两大部分。假设S-box 长度和密钥长度均为为n。先来看看算法的初始化部分(用类C伪代码表示): for (i=0; i

} 得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。 RC4加密算法在C++中的实现: RC4函数(加密/解密):其实RC4只有加密,将密文再加密一次,就是解密了。 GetKey函数:随机字符串产生器。 ByteToHex函数:把字节码转为十六进制码,一个字节两个十六进制。十六进制字符串非常适合在HTTP中传输。 HexToByte函数:把十六进制字符串,转为字节码。。 Encrypt函数:把字符串经RC4加密后,再把密文转为十六进制字符串返回,可直接用于传输。 Decrypt函数:直接密码十六进制字符串密文,再解密,返回字符串明文。 源代码 以下为Encrypt.h文件代码 #ifndef _ENCRYPT_RC4_ #defi ne _ENCRYPT_RC4_ #in clude #defi ne BOX_LEN 256 int GetKey(c onst un sig ned char* pass, int pass_le n, un sig ned char *out); int RC4(c onst un sig ned char* data, int data_le n, const un sig ned char* key, int key_le n, un sig ned char* out, i nt* out_le n); static void swap_byte( un sig ned char* a, un sig ned char* b); char* En crypt(co nst char* szSource, const char* szPassWord); // 加密,返回加密结果 char* Decrypt(co nst char* szSource, con st char* szPassWord); // 解密,返回解密结果 char* ByteToHex(c onst un sig ned char* vByte, const int vLe n); // 把字节码pbBuffer转为十六进制字符串,方便传输 unsigned char* HexToByte(const char* szHex); // 把十六进制字符串转为字节码pbBuffer,解码 #e ndif // #ifndef _ENCRYPT_RC4_

C语言程序设计

一、单选题 1. (4分)若调用fputc函数输出字符成功,则其返回值是( )。? A. EOF ? B. 1 ? C. 0 ? D. 输出的字符 得分:0知识点:C语言程序设计作业题收起解析 答案D 解析 2. (4分)若以下程序段: struct dent { int n; int*m; }; int a=1, b=2,c=3; struct dent s[3]={{101<&a},{102<&b},{103,&c}; main() { struct dent *p;

p=s; ….. } 则以下表达中值为2的是()。 ? A. (p++)->m ? B. *(P++)->m ? C. (*p).m ? D. *(++p)->m 得分:0知识点:C语言程序设计作业题收起解析 答案D 解析 3. (4分)在一个c源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( ). ? A. extern ? B. register ? C. auto ? D. static 得分:0知识点:C语言程序设计作业题收起解析 答案D 解析

4. (4分)若二维数组a有m列,则在a[i][j]前面的元素个数为()。? A. j*m+i ? B. i*m+j ? C. i*m+j-1 ? D. i*m+j+1 得分:0知识点:C语言程序设计作业题收起解析 答案B 解析 5. (4分)下面程序的运行结果是(). main() { struct cmplx {int x; int y; } cnum[2]={1,3,2,7}; printf(“%d ”,cnum[0].y/cnum[0].x*cnum[1].x); } ? A. 0 ? B. 1 ? C. 3

c语言程序设计文档格式

封面 此页统一购买注意本页以下两项的填写 指导老师:李筠虞闯 完成日期:2016-6-5

成绩评定表

课程设计任务书

目录 1、内容及要求 ................................................ 错误!未定义书签。 2、功能分析 .................................................... 错误!未定义书签。 3、设计 ............................................................ 错误!未定义书签。 4、运行与测试 ................................................ 错误!未定义书签。 5、总结 ............................................................ 错误!未定义书签。参考文献 .......................................................... 错误!未定义书签。

1、内容及要求 1.1内容: 人事档案管理:建立数据文件(职工、部门、职称)完成:①数据录入②查询③插入、删除、修改④排序等功能。 1.2要求: 1.程序代码完成,编译运行成功。 2.数据输入首选采用文件的方式,其次键盘输入。 3.分析采用哪种合适的存储结构来储存数据 4.设计一定的用户界面,简洁。 2、功能分析 2.1. 程序设计一般由两部分组成:算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。在人事管理过程中,由于预计记录对于一个单位的人事数来说太大,操作除了能够增加、删除、修改、保存等外,更多的情况是查询,且能够实现快速查询。特别是当需要动态变化时利用指针,例如插入和删除数据等操作时,为方便插入和删除人事记录,通过数据的自动的移动数据,实现动态管理。 2.2本系统涉及的模块主要有:开始、系统管理、人事管理、信息查询等四大模块。 (1)开始界面主要包括: 各个功能的选择。 (1)人事管理主要包括: (编号、姓名等)基本内容的录入,增加等。 (2) 系统管理主要包括:员工信息的修改,排序等。 (3) 信息查询主要包括:员工信息的查找、删除等。 2.3功能模块图

(完整word版)电子系c语言程序设计加密解密

课程设计报告 课程设计名称: C语言程序设计 指导教师: 学生: 学号: 学院:电子信息工程学院 完成时间: 2011年9月27日 嘉应学院电子信息工程学院 1

C语言课程设计说明书 目录 1 需求分析 (1) 2总体设计 (2) 3详细设计 (3) 3.1 换位加密流程图 (3) 3.2 换位解密流程图 (4) 3.3 替代加密流程图 (5) 3.4 替代解密流程图 (6) 4调试与测试 (8) 5测试结果 (8) 6附录 (11) I

1 需求分析 问题描述(实验指导书中已经给出) ①数据的输入和输出;要求使用文件操作。文件(明文,仅限于英文字母)存放在某一已知文本文件中,加密后的文件(密文)存放在另一文件中。 ②换位加密和解密: 加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文; ③凯撒加密和解密: 加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文; ④统计单词的个数; ⑤退出。

2总体设计 (程序设计总流程图,可以画带流程线的流程图) 此处只需要写出一个流程图就可以了,就是总的那个流程图,请规范的画图。不需要分出2.1和2.2. 开始 welcome() caidan() transpen( ); transpde( ) caesaren( ) caesarde() mingwent miwentongji(byebye()

3详细设计 (各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等 这块大家问题最多了,这里不是写程序代码,而是写流程图里面各个主要函数的作用,函数之间关系的说明。 以第1题为例,此处应为: 3.1 换位加密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt 和miwen.txt 文件 输入密钥n 输入明文到数组r k=strlen(r)j 计算数组r 长度 for i=0 to k 关闭并保存mingwen.txt 文件 打开mingwen.txt 文件 space(h,r) 将明文去空格并放到数组h 中 m=strlen(h) 计算数组h 长度 m%n==0 是 否 hang=m/n hang=m/n+1 j=0 for i=0 to hang for i=m to hang*n z=0 fputc(r[i],mingwen) 将明文存放到mingwen.txt 文件中 for j=0 to n h[i]='a'+j j++ for i=0 to hang zl[i][j]=h[z] z++ for j=o to n zl[i][j]=h[z] z++

C语言实现文件的des加解密实例

C语言实现文件的des加解密实例 c语言中的正则 ,d3.js画矢量图+可拖拽的实现思路 DOM2级事件处理程序跨浏览器兼容事件 ,exel导入/导出和csv文件导入、导出 ,Go http访问使用代理 golang进行socket通讯 ,hessian+hibernate 懒加载处理 ,HTML+CSS代码橙色导航菜单html5 撞球游戏 // get 网络请求 func Get(api string,params .Values)(rs[]byte ,err error){ var *. ,err=.Parse(api) if err!=nil{ fmt.Printf("解析错误:\r\n%v",err) return nil,err } //如果参数中有中文参数,这个方法会进行Encode //iOS KVO注册和监听方法 //C语言websocket编程 .RawQuery=params.Encode() resp,err:=http.Get(.String()) if err!=nil{ fmt.Println("err:",err) return nil,err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } // post 网络请求 ,params 是.Values类型 func Post(api string, params .Values)(rs[]byte,err error){ resp,err:=http.PostForm(api, params) if err!=nil{ return nil ,err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } //代码描述:基于GO的黄金数据接口调用代码实例 //关联数据:黄金数据 //css之before and after [代码] [C#]代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using https://www.doczj.com/doc/8816631684.html,;

RSA加解密算法C语言的实现

#include #include #include #include #include #include #define MAX 100 #define LEN sizeof(struct slink) void sub(int a[MAX],int b[MAX] ,int c[MAX] ); struct slink { int bignum[MAX]; /*bignum[98]用来标记正负号,1正,0负bignum[99]来标记实际长度*/ struct slink *next; }; /*/--------------------------------------自己建立的大数运算库-------------------------------------*/ void print( int a[MAX] ) { int i; for(i=0;il2) return 1; if (l1=0;i--) { if (a1[i]>a2[i]) return 1 ; if (a1[i]

《C语言程序设计A》

《C语言程序设计a》期末复习题 一、单选题 1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为( A )。 A. main B. MAIN C. name D. function 2.每个C语言程序文件的编译错误分为( B )类。 A.1 B.2 C.3 D.4 3. 字符串"a+b=12\n"的长度为( B )。 A. 6 B. 7 C. 8 D. 9 4. 在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为( B )语句。 A. for B. if C. do D. while 5. 在下面的do-while循环语句中,其循环体语句被执行的次数为( D )。 int i=0; do i++; while(i<10); A. 4 B. 3 C. 5 D. 10 6. 将两个字符串连接起来组成一个字符串时,选用的函数为( C )。 A. strlen() B. strcap() C. strcat() D. strcmp() 7. 若用数组名作为函数调用的实参,传递给形参的是( A )。 A. 数组的首地址 B. 数组中第一个元素的值 C. 数组中全部元素的值 D. 数组元素的个数 8. 假定a为一个整数类型的数组名,整数类型的长度为4,则元素a[4]的地址比a数组的首地址大( C )个字节。 A. 4 B. 8 C. 16 D. 32 9. 假定s被定义为指针类型char *的变量,初始指向的字符串为"Hello world!",若要使变量p指向s 所指向的字符串,则p应定义为( A )。 A. char *p=s; B. char *p=&s; C. char *p;p=*s; D. char *p; p=&s; 10. 从一个数据文件中读入以换行符结束的一行字符串的函数为( B )。 A. gets() B. fgets() C. getc() D. fgetc() 11. 由C语言目标文件连接而成的可执行文件的缺省扩展名为( B )。 A. cpp B. exe C. obj D. c 12. 设有两条语句为“int a=12; a+=a*a;”,则执行结束后,a的值为( C )。 A. 12 B. 144 C. 156 D. 288 13. 带有随机函数调用的表达式rand()%20的值在( C )区间内。

c语言程序设计文件加密解密

程序报告设计 题目:加密解密处理 程序设计报告的电子文档(B10080128—程序设计.doc ) 一.老师对作业要求。 1:对学生课程设计两周的纪律及提交内容的要求: (1)规定上机的时间内不得无故缺勤,有事需要向指导老师书面请假; (2)上机时禁止玩游戏,屡教不改者,实习成绩可为不及格;(3)每人手头准备一至两本C/C++的有关工具书,上机前作好充分的准备,包括事先写好主要算法的程序 代码以保证充分利用上机的时间调试程序; (4)同组可以讨论思路,但是程序要自己完成,不可抄袭,若完全抄袭别人的,实习成绩可为不及格; (5)实习的最后阶段认真完成实习报告的电子文档。报告内容不得少于15页。 (6)每个学生最后提交的材料: 压缩文件一个,起名为:学号名_题目名.rar(如:B06020127_学生管理系统.rar)。该压缩文件中包含下列 几个文件:程序设计报告的电子文档(起名为:学号_程序设计.doc)、源程序文件(起名为:学号名_题目

名.cpp,如:B06020127_学生管理系统.cpp)、原始数据文件(如:stud.dat)、编译链接后得到的可执行 文件(起名为:学号名_题目名.exe) (7)请同学独立完成报告,若发现两份报告一模一样,则两人都按不及格论处,请各位同学珍惜自己的版权 ,也请指导老师严格把关。 附2:上机时间:每天上午8:00——11:20 附3:成绩的评定 根据学生平时的上机出勤情况、为上机所作的准备情况、上机时的表现、程序的完成情况、报告的完成情况 、验收答辩时的表现等综合打分。等级为:优秀、良好、中等、及格、不及格。 附4:课程设计报告具体内容要求 学生管理系统 (题目格式:宋体,3号,加粗,居中对齐) 一、课题内容和要求(格式:宋体,4号,加粗,两端对齐) 该部分可参考前面给出的问题描述再加以细化一些 (正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)

c语言课程设计-文件加密解密(含源代码)

C 语 言 课 程 设 计 实 验 报 告 实验名称:文件加密解密 院系:软件学院 学号: 日期:2012年9月3日—9月17日

一:设计题目 1:设计图形用户界面。 2:对文件进行加密并对加密文件进行保存。 3:对加密了的文件进行解密。 二:设计过程 设计过程中遇到的困难和解决方法: 1:不能很好地理解题意(通过老师的讲解)。 2:不知道如何设计加密解密程序(通过翻阅书籍和上网查找资料) 过程: 首先通过学习老师提供的资料了解大致的设计过程并懂得运用一些以前没有学习过的c语言。先利用文本文件设计出加密解密的主要过程并能运行。知道如何运用fopen将原文件打开并用fread将原文件内容读出来,然后进行加密设计并将加密的数据用fwrite写进指定的文件中并保存。然后读出加密的文件并解密并保存。最后在写出的程序中加入图形用户界面,运用window,box,gotoxy等进行设计。 三:源代码 #include /* 标准输入、输出函数 */ #include /* 标准库函数 */ #include //*字符串处理函数 */ #include /* 字符操作函数 */ #include #include #define key_down 80 #define key_up 72

#define key_esc 1 #define key_enter 28 #define SIZE 1 void box(int startx,int starty,int high,int width); int get_key(); char buf[20*20*4]; /*///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////加密解密 */ void fun(char *list,char *sd) /*加密过程*/ { FILE *fp1,*fp2; char buf[1000]; /*文件临时存放处*/ register int ch; fp1=fopen("e:\list.txt","r"); /*用可读方式打开文件*/ fp2=fopen("e:\sd.txt","w"); /*用可写方式创建一个文件*/ if(fp1==NULL) { printf("cannot open file\n"); exit(1); } if(fp2==NULL) { printf("cannot build file\n"); exit(1); } ch=fgetc(fp1); /*读出打开文件的光标处的一个字符*/ while(!feof(fp1)) /*读出的字符不是最后的字符*/ { ch=ch<<1; /*加密方法*/ fputc(ch,fp2); /*加密的字符存放在指定的地方*/ ch=fgetc(fp1); } rewind(fp2); /*将光标移动到第一个字符前面*/ fread(buf,sizeof(buf),1,fp2); /*从文件的当前位置开始中读取buf中存放的数据*/ printf("%s",buf); /*fclose(fp1); fclose(fp2); */ }

《C语言程序设计》复习 参考答案

第一章 【随堂练习1-2】 1.下面哪些标识符属于合法的用户自定义标识符: Main、void、_num、my$、a*、N4、3m、a-2 答:合法的用户自定义标识符是:Main、_num、N4 2.结合【例1.2】指出程序代码中所用到的标识符哪些是关键字,哪些是预定义标识符,哪些是用户自定义标识符。 答:关键字:void、int 预定义标识符:include、main、printf、scanf 用户自定义标识符:a、b、c 3.分析【例1.2】中函数的结构,包括函数首部(函数返回值类型、函数名、形式参数)、函数体语句(说明语句、可执行语句)。 答:函数首部:void main( ),其中函数返回值类型为void、函数名为main、形式参数无; 函数体语句:{}内的语句为函数体,其中:说明语句为int a,b,c;,其余为可执行语句。 3.标识符是用来标识程序中的某个对象名字的字符序列。C语言把标识符分为三类,即关键字、预定义标识符、用户自定义标识符。对于用户自定义标识符的命名C语言规定: (1)所有的用户标识符必须先定义后使用; (2)用户标识符由字母(A~Z,a~z)、数字(0~9)、下划线“_”组成,并且首字符不能是数字; (3)区分大小写; (4)不能用关键字作为用户自定义标识符,通常不使用预定义标识符作为用户自定义标识符。 4.理论上讲,程序开发过程分为四个步骤,分别为: (1)编辑源程序 (2)编译源程序,生成目标程序 (3)连接目标程序及其相关模块,生成可执行文件 (4)运行可执行文件

一.单元练习 一.选择题 1.构成C语言程序的基本单位是()。 A.框架B.预处理C.函数D.语句 2.在程序开发过程中,把文本文件格式源程序转化为二进制格式的目标程序的过程称之为()。 A.编辑B.编译C.连接D.运行 3.关于主函数,下列说法不正确的是()。 A.一个完整的C语言应用程序有唯一的主函数 B.主函数的名称只能是main C.主函数可以被其他自定义函数调用 D.C语言程序的运行从主函数开始,以主函数为核心展开 4.关于标识符,下列说法不正确的是()。 A.库函数名称为预定义标识符,不建议用作用户自定义标识符 B. 关键字不能作为用户自定义标识符 C.用户自定义标识符中不区分大小写字母 D.标识符中可以出现下划线,且可以出现在标识符的任意位置 5.以下可用作用户自定义标识符的一组是()。 A.void、return、if B.printf、include、fabs C.Max、_abc、Main D.2abc、pay$、sum-10 二.填空题 1.C语言程序一般由若干个函数构成,程序中应至少包含一个_________,其名称只能为_________。 2.C语言程序中每条语句必须以_________结束。 3.C语言程序的注释是以_________开头,以________结束的,在VC++6.0编程环境中,可使用_________作为注释的起始标识,注释对程序的执行不起任何作用。 4.最初编写的C语言程序称为_________,其扩展名为_________,编译后生成的文件为_________,其扩展名是_________,连接后生成的文件是_________,其扩展名是_________。5.C语言规定,标识符只能由_________、_________和_________三种字符组成,而且,首字符只能是_________或_________。

《C语言程序设计-文件》习题

《C语言程序设计-文件》习题 9.1 填空题 1.C语言中根据数据的ń= 52;织形式,把文件分为= 【= 】和【= 】两种。 2.C语言中文件的格式?= 70;输入输出函数对是 【= = 】;文件的数据块?= 55;入输出函数对是【<= span lang=3DEN-US style=3D'mso-bidi-font-size:10.5pt'> = 】;文件的字符串?= 55;入输出函数对是【<= span lang=3DEN-US style=3D'mso-bidi-font-size:10.5pt'> = 】。 9.2 选择题 1.当已存在一个= abc.txt文件时,&#= 25191;行函数fopen= (“abc.txt”, “r+”)的功能是( )。 A.打开abc.txt文件,清&#= 38500;原有内容 B.打开abc.txt文件,只&#= 33021;写入新的内容 C.打开abc.txt文件,只&#= 33021;读取原有内容 D.打开abc.txt文件,可&#= 20197;读取和写入新的内ê= 81; 2.fopen()函数的mode取值”r”和”w”时,它们之间的= 差别是( )。 A.”r”可向文件写入,= ”w”不可向文&#= 20214;写入 B.”r”不可向文件写入= ,”w”可向文件&#= 20889;入 C.”r”不可由文件读出= ,”w”可由文件&#= 35835;出 D.文件不&#= 23384;在时,”r”建立新文&#= 20214;,”w”出错3.以下程序的的= 功能是( )。 #include main( ) { &nb= sp; FILE *fp; &nb= sp; char str[]=3D”HELLO”;<= /p> &nb= sp; fp=3Dfopen(“PRNR= 21;, “w”);

使用C语言实现古典加密

实训一古典加密算法 一、实训目的 熟悉古典数据加密的工作原理,并且能够利用相关加密算法进行加解密。 二、实训环境 一台安装有Windows XP的计算机。 三、实训内容 用C编写程序实现对某一文件内容用恺撒加密法进行加密,然后用解密程序进行解密。 四、实训步骤 1、用C编写程序实现对某一文件内容用恺撒加密法进行加密。 2、用解密程序对密文进行解密。 五、实训效果检测 上交加密程序、解密程序、原文(.txt文档) 解:(1)使用的加密、解密程序代码如下: #include #include #include #include char encrypt(char ch,int n)/*加密函数,把字符向右循环移位n*/ { while(ch>='A'&&ch<='Z') { return ('A'+(ch-'A'+n)%26); } while(ch>='a'&&ch<='z') {

return ('a'+(ch-'a'+n)%26); } return ch; } void menu()/*菜单,1.加密,2.解密,3.暴力破解,密码只能是数字*/ { //clrscr(); printf("\n========================================================="); printf("\n1.Encrypt the file"); printf("\n2.Decrypt the file"); printf("\n3.Force decrypt file"); printf("\n4.Quit\n"); printf("=========================================================\n"); printf("Please select a item:"); return; } void main() { int i,n; char ch0,ch1; FILE *in,*out; char infile[20],outfile[20]; //textbackground(BLACK); //textcolor(LIGHTGREEN); //clrscr(); menu(); ch0=getch(); while(ch0!='4') { if(ch0=='1') { // clrscr(); printf("\nPlease input the infile:"); scanf("%s",infile);/*输入需要加密的文件名*/ if((in=fopen(infile,"r"))==NULL) { printf("Can not open the infile!\n"); printf("Press any key to exit!\n"); getch();

C语言程序设计

C语言程序设计 Prepared on 22 November 2020

一、单选题1. (4分)若调用fputc函数输出字符成功,则其返回值是( )。 ? ? ? ? D.输出的字符 得分:0知识点:C语言程序设计作业题 D 2. (4分)若以下程序段: struct dent? { int n; int*m; }; int a=1, b=2,c=3; struct dent s[3]={{101<&a},{102<&b},{103,&c}; main() { struct dent *p;

….. }? 则以下表达中值为2的是()。 ? A.(p++)->m ? B.*(P++)->m ? C.(*p).m ? D.*(++p)->m 得分:0知识点:C语言程序设计作业题 D 3. (4分)在一个c源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( ). ? ? ? ? 得分:0知识点:C语言程序设计作业题 D

(4分)若二维数组a有m列,则在a[i][j]前面的元素个数为()。 ?*m+i ?*m+j ?*m+j-1 ?*m+j+1 得分:0知识点:C语言程序设计作业题 B 5. (4分)下面程序的运行结果是( ). main() { struct cmplx {int x; int y; } cnum[2]={1,3,2,7}; printf(“%d ”,cnum[0].y/cnum[0].x*cnum[1].x); } ? ?

? ? 得分:4知识点:C语言程序设计作业题 6. (4分)下面程序段的运行结果是( ). for(x=3,x<6;x++) printf((x%2)(“##%d ”),x); ? A.**3 ?##4 ?**5 ? B.##3 ?**4 ?##5 ? C.##3 ?**4##5 ? D.**3##4 ?**5 得分:0知识点:C语言程序设计作业题 D 7. (4分)若I为整型变量,则以下循环执行次数是( ).

加密及解密算法(利用C语言)

利用VC++6.0 C语言进行设计加密: #include "stdio.h" #include"string.h" void main() { int i,k,h; char g[26]; printf("请输入字符窜\n"); gets(g); k=strlen(g); do{ for(i=0;i='a'&&g[i]<='z') g[i]-=32; for(i=0;i='A') g[i]+=3; else if(g[i]>'W'&&g[i]<='Z') g[i]-=23; } printf("%s\n",g); printf("0-退出任意键继续\n"); scanf("%d",&h); } while(h); } 2.进行解密算法 #include "stdio.h" #include"string.h" void main() { int i,k,h; char g[26]; printf("请输入字符窜\n");

gets(g); k=strlen(g); do{ for(i=0;i='d'&&g[i]<='z') g[i]-=3; else if(g[i]>'d'&&g[i]<='a') g[i]+=23; for(i=0;i='D'&&g[i]<='Z') g[i]-=3; else if(g[i]>'D'&&g[i]<='A') g[i]+=23; printf("%s\n",g); printf("0-退出任意键继续\n"); scanf("%d",&h); } while(h); }

C语言程序设计 文档

是否具有对高级语言HLL(High Level Language)的支持已成为衡量微控制器性能的标准之一。显然,在HLL平台上要比在汇编级上编程具有诸多优势:代码清晰易读、易维护,易形成模块化,便于重复使用从而增加代码的开发效率。 HLL中又因C语言的可移植性最佳而成为首选。因此,支持C语言几乎是所有微控制器设计的一项基本要求。μ’nSP?指令结构的设计就着重考虑了对C语言的支持。GCC是一种针对μ’nSP?操作平台的ANSI-C编译器, 1 μ’nSP?支持的C语言算逻操作符(#) 在μ’nSP?的指令系统算逻操作符与ANSI-C算符大同小异,见表4.6。 2 C语言支持的数据类型 μ’nSP?支持ANSI-C中使用的基本数据类型如表4.7所示。

3 程序调用协议 由于C编译器产生的所有标号都以下划线(_)为前缀,而C程序在调用汇编程序时要求汇编程序名也以下划线( _ )为前缀。 模块代码间的调用,是遵循μ’nSP?体系的调用协议(Calling Convention)。所谓调用协议,是指用于标准子程序之间一个模块与另一模块的通讯约定;即使两个模块是以不同的语言编写而成,亦是如此。 调用协议是指这样一套法则:它使不同的子程序代码之间形成一种握手通讯接口,并完成由一个子程序到另一个子程序的参数传递与控制,以及定义出子程序调用与子程序返回值的常规规则。 调用协议包括以下一些相关要素: 1) 调用子程序间的参数传递; 2) 子程序返回值; 3) 调用子程序过程中所用堆栈; 4) 用于暂存数据的中间寄存器。 μ’nSP?体系的调用协议的内容如下: 1. 参数传递 参数以相反的顺序(从右到左)被压入栈中。必要时所有的参数都被转换成其在函数原型中被声明过的数据类型。但如果函数的调用发生在其声明之前,则传递在调用函数里的参数是不会被进行任何数据类型转换的。 2. 堆栈维护及排列 函数调用者应切记在程序返回时将调用程序压入栈中的参数弹出。 各参数和局部变量在堆栈中的排列如图4.22所示。 3. 返回值 16位的返回值存放在寄存器R1中。32位的返回值存入寄存器对R1、R2中;其中低字在R1中,高字在R2中。若要返回结构则需在R1中存放一个指向结构的指针。 4. 寄存器数据暂存方式 编译器会产生prolog/epilog过程动作来暂存或恢复PC、SR及BP寄存器。汇编器则通过‘CALL’指令可将PC和SR自动压入栈中,而通过‘RETF’或‘RETI’指令将其自动弹出栈来。

C语言课程设计-文件加密解密

C语言程序设计课程设计

计算1313班C语言程序设计课程设计大纲 一、设计目的: 通过课程设计,学会把相关的理论知识和实际应用相结合,锻炼了独立实践的能力;学会了查阅与设计相关资料的能力。 二、设计内容: 设计题目: 学生使用C语言设计程序,产生如下界面,0-6对应不同功能,若不用汉字,可用拼音或英文表示。 ************************************************************************************** * * * 1--输入2--加密3--解密4--显示5—统计6—统计全部0--退出* * * *************************************************************************************** 请选择(0--6): 0.退出系统。 1.输入信息,并写入文本文件。 2.对给定的文件进行加密。 3.对给定的文件进行解密。 4.显示文本文件的内容。 5.统计某单词在文件中出现的次数。 *6. 统计在文件中各单词出现的次数(可选)。 三、设计思想: 主要思想为由总到分,由上到下的逐级分配任务的思想。通过主函数调用各个被调用的函数,再由被调用函数通过多个循环嵌套的使用实现各自的功能,最终达到程序的要求。 1.主函数中:先使用了switch选择结构来调用不同命令下所对应的被调用函

数,其中包括:输入函数shuru(),加密函数jiami(),解密函数jiemi(),显示函数show(),统计函数count1()、count2。在每个被调用函数中还多次调用了用来判断是否要继续的函数judge(),以达到循环的目的。在主函数中还多次使用清屏命令system(“cls”),以及刷新全部流的命令flushall()、fllush(stdin)使调用函数后,界面保持清洁,提高了程序的易读性。 2.输入函数中:while((c=getchar())!=EOF)的使用能提示使用者结束的命令,并且通过fputc(c,fp)把一个字符c写到由文件指针fp指定的磁盘文件上。 3.加密函数中:先定义两个指针,将输入的文件内容通过fputc(c+1,fp1);进行加密并保存到fp1所指定的文件上。保存成功后,使用remove(fname);语句删除掉原文件,并使用rename("jiami.txt",fname);语句将加密后的文件名改为已被删除的原文件名。 4.解密函数中:考虑到解密时的安全性问题,在进入解密系统时,需先输入进入解密系统的密码,因此在程序的主函数外先对解密系统密码进行初始值化,然后在进入解密系统时输入该密码就可进入。由于加密时是对每个文件内容都加上了20,所以解密时只需再减20即可。 5.显示函数中:while(!feof(fp))语句用来判断是否到了文件的末尾,可以用来保证文件的内容都被显示出来。 6.统计函数中:先定义一个字符串数组,将文件中的内容存到数组中,再使用tolower函数统一将数组所有字符转化为小写字母,将用户输入的字符也转化为小写字母,用strcmp来比较输入的字符是否与文件中的字符相等,若相等,则变量jishu加1,最后可以统计出所查单词在文件中的数目。l=strlen(word);语句表示用户输入字符的长度。 7.高级统计函数中:通过调用tol()自定义函数来判断文件中的字符是否是小写字母,若是的话,则将文件中的字符赋值给二维字符串数组cpy[][],而二维字符串数组则通过两个for循环嵌套来与自身进行比较,并且通过变量a的自增与自减来实现将重复被统计过的单词减去被多统计的次数,算出正确的单词个数。 四、实验小结: 1. 过多的嵌套级别可能会使程序难以理解,应避免使用超过3个级别的缩进。

相关主题
文本预览
相关文档 最新文档