(完整word版)电子系c语言程序设计加密解密
- 格式:doc
- 大小:218.11 KB
- 文档页数:24
c语言文件加密解密课程设计一、课程目标知识目标:1. 学生能理解C语言文件操作的基本原理,掌握文件读写的基本函数。
2. 学生能掌握基础的加密解密算法,并运用C语言实现文件的加密解密功能。
3. 学生了解加密解密技术在生活中的应用及其重要性。
技能目标:1. 学生能够独立编写C语言程序,实现对文本文件的加密和解密。
2. 学生能够运用调试工具对程序进行调试,解决常见的错误和异常。
3. 学生能够通过小组合作,共同完成一个文件加密解密项目,提高团队协作能力。
情感态度价值观目标:1. 学生培养对编程和信息安全领域的兴趣,激发学习主动性和探究精神。
2. 学生在课程学习过程中,增强解决问题的信心,培养面对困难的勇气和毅力。
3. 学生认识到信息安全的重要性,树立正确的网络安全观念,遵循道德规范,不参与非法破解活动。
课程性质:本课程为C语言高级应用课程,通过项目实践,帮助学生将所学知识应用于实际场景,提高编程能力和信息安全意识。
学生特点:学生已经掌握了C语言基础知识,具有一定的编程能力和逻辑思维能力,但对信息安全领域了解较少。
教学要求:注重理论与实践相结合,引导学生通过动手实践,掌握文件加密解密技术,提高学生的编程技能和信息安全素养。
同时,关注学生的个体差异,鼓励学生积极参与,发挥团队协作精神。
通过课程学习,实现以上具体的学习成果。
二、教学内容1. 文件操作基础:回顾C语言中文件操作的相关知识,重点掌握fopen、fprintf、fscanf、fclose等函数的使用方法,理解文件读写的过程。
教材章节:第三章 文件操作2. 加密解密原理:介绍基础的加密解密算法,如异或加密、移位加密等,分析算法原理,并通过示例代码展示算法实现。
教材章节:第十章 安全编程3. C语言实现加密解密:运用所学的加密解密原理,使用C语言编写程序,实现对文本文件的加密和解密功能。
教材章节:第十章 安全编程4. 调试与优化:教授学生如何使用调试工具,如GDB,对程序进行调试,找出并解决常见错误和异常,提高程序稳定性。
C语言课程设计数据的加密与解密《C语言课程设计》课程设计报告题目数据的加密与解密学号120802038姓名刘磊年级专业2012级电子信息工程专业指导教师王元航完成日期2013 年 6 月17 日安徽师范大学物理与电子信息学院College of Physics and Electronic Information, Anhui Normal University目录课程设计任务书 (3)摘要 (4)关键词 (4)原理 (4)一.系统功能分析 (5)1.1设计目的 (5)1.2功能描述 (5)二.C 语言程序编写 (6)2.1程序结构图 (6)2.2程序流程图 (6)2.3程序源代码 (8)三.程序功能示例 (13)3.1示例截图 (13)3.2测试过程 (16)四.设计体会与收获 (16)五.参考文献 (16)《C 语言程序》课程设计任务书题目数据的加密与解密设计目的将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密文(用户从键盘输入)将对应字符进行移位操作即可,解密时移动相反。
例如:加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后移动5位(注:z后接a)可得到密文(乱码)fghijkl;对该文件解密:文件内容为fghijk1,密钥为5,则有fghijk1每个字母向前移动5位(注a后接z),可得到原文abcdef。
设计进度安排第一阶段:选择课程设计的题目;第二阶段:搜寻有关课程设计的资料,查阅相关的书籍;第三阶段:开始编辑C语言程序;第四阶段:完成了C训言程序的编写,开始撰写C语言菾程设计报告;第五阶段:完成了C语言课程设计报告的撰写。
教师审核签名摘要:作为保障数据数据安全的一种方式,对于信息的加密技巧起源于欧洲,最广为人知的编码机器是德国的German Enigma,在第二次世界大战中德国人利用它创建了加密信息系统,从而解决军事信息的保密通讯问题。
尽管加密技术被首先使用在军事通信领域,但是人们或许出于安全的考虑,开始逐渐对于商业机密、政府文件等重要信息实施加密手段。
c语言课程设计加密与解密一、教学目标通过本章的学习,学生将掌握C语言加密与解密的基本概念和方法,理解加密与解密的技术原理,能够运用C语言实现简单的加密和解密功能。
1.理解加密与解密的概念及其在计算机安全中的应用。
2.掌握C语言的基本数据类型和运算符。
3.掌握C语言的函数和数组。
4.能够使用C语言编写简单的加密和解密程序。
5.能够分析C语言程序的运行结果,并对其进行调试和优化。
情感态度价值观目标:1.培养学生对计算机安全的认识,提高其对加密与解密技术的重视。
2.培养学生解决问题的能力和创新思维,激发其对C语言编程的兴趣。
二、教学内容本章的教学内容主要包括C语言的基本概念、数据类型、运算符、函数和数组,以及加密与解密的技术原理和实现方法。
1.C语言的基本概念:介绍C语言的历史和发展,理解C语言的特点和优势。
2.数据类型和运算符:掌握基本的数据类型(整型、浮点型、字符型等)和运算符(算术运算符、关系运算符、逻辑运算符等),能够正确使用它们进行编程。
3.函数和数组:理解函数的定义和调用,掌握数组的声明和使用,能够利用函数和数组实现简单的加密和解密功能。
4.加密与解密的技术原理:学习加密与解密的基本概念,了解常见的加密算法(如DES、AES等)和解密算法,理解加密与解密的技术原理和流程。
5.加密与解密的实现方法:学习使用C语言实现简单的加密和解密功能,掌握加密和解密的编程技巧,能够分析和调试程序,优化程序的性能和安全性。
三、教学方法本章的教学方法主要包括讲授法、案例分析法和实验法。
1.讲授法:通过讲解C语言的基本概念、数据类型、运算符、函数和数组,以及加密与解密的技术原理和实现方法,使学生掌握相关的知识和技能。
2.案例分析法:通过分析典型的加密和解密案例,使学生理解加密与解密的应用和实际意义,培养学生的分析和解决问题的能力。
3.实验法:通过编写和调试C语言程序,使学生掌握加密和解密的编程技巧,提高学生的实际操作能力和创新思维。
课程设计报告课程设计名称: C语言程序设计指导教师:学生:学号:学院:电子信息工程学院完成时间: 2011年9月27日嘉应学院电子信息工程学院目录1 需求分析 02总体设计 (1)3详细设计 (2)3.1 换位加密流程图 (2)3。
2 换位解密流程图 (3)3。
3 替代加密流程图 (4)3。
4 替代解密流程图 (6)4调试与测试 (8)5测试结果 (9)6附录 (13)1 需求分析问题描述(实验指导书中已经给出)①数据的输入和输出;要求使用文件操作.文件(明文,仅限于英文字母)存放在某一已知文本文件中,加密后的文件(密文)存放在另一文件中.②换位加密和解密:加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文;③凯撒加密和解密:加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文;④统计单词的个数;⑤退出。
2总体设计(程序设计总流程图,可以画带流程线的流程图)此处只需要写出一个流程图就可以了,就是总的那个流程图,请规范的画图。
不需要分出2.1和2。
2.3详细设计(各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等这块大家问题最多了,这里不是写程序代码,而是写流程图里面各个主要函数的作用,函数之间关系的说明。
以第1题为例,此处应为:3。
1 换位加密流程图流程图(对流程图加以说明.可以把关键语句放在此处,加以注释说明)3。
2 换位解密流程图流程图(对流程图加以说明。
可以把关键语句放在此处,加以注释说明)3。
3 替代加密流程图流程图(对流程图加以说明。
可以把关键语句放在此处,加以注释说明)3.4 替代解密流程图流程图(对流程图加以说明。
可以把关键语句放在此处,加以注释说明)4调试与测试(调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施)调试程序,描述测试过程中遇到的问题和解决办法1.文件操作时打开的文件应该及时关闭,不然不会保存,在下次打开时就读不到以前存放在该文件里面的数据,而编译时却不会提示有错误.2..函数调用时,被调函数必须在前面声明或者写在调用函数的上面,不然在编译时也不会提示错误,程序却不能执行.3.空格的去除;采用指针的方法将去除空格的字符串放到另一个数组中4.菜单函数的容错;用default:system(”cls”); caidan();实现。
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指定的磁盘文件上。
C语言中的数据加密与解密技术数据加密与解密技术在现代信息安全领域中起着至关重要的作用,能够保护数据的隐私性和完整性,防止数据被非法窃取和篡改。
在C语言中,我们可以利用各种加密算法实现数据加密和解密操作,确保数据在传输和存储过程中的安全性。
在C语言中,常用的数据加密算法包括对称加密算法和非对称加密算法。
对称加密算法使用相同的密钥进行加密和解密操作,简单高效,适用于小规模数据加密。
常见的对称加密算法有DES、AES等。
非对称加密算法需要一对公钥和私钥,公钥用于加密数据,私钥用于解密数据,安全性更高,适用于加密大规模数据。
常见的非对称加密算法有RSA、ECC等。
在C语言中,我们可以使用openssl库或者自行实现上述加密算法来实现数据加密和解密。
下面以AES对称加密算法为例进行介绍。
首先,我们需要在C语言中引入openssl库,通过以下方式进行安装和引入:```sudo apt-get install libssl-dev``````c#include <openssl/aes.h>#include <openssl/rand.h>```接下来,我们可以定义一个函数来实现数据的加密和解密操作:```cvoid encrypt_decrypt_data(unsigned char *data, int data_len, unsigned char *key, unsigned char *iv, int encrypt) {AES_KEY aes_key;AES_set_encrypt_key(key, 128, &aes_key);if (encrypt) {AES_cbc_encrypt(data, data, data_len, &aes_key, iv, AES_ENCRYPT);} else {AES_cbc_encrypt(data, data, data_len, &aes_key, iv, AES_DECRYPT);}}```在上面的函数中,我们使用AES算法对数据进行加密或解密操作,其中data 为待加密或解密的数据,data_len为数据长度,key为密钥,iv为初始化向量,encrypt为加密标志。
C语言程序设计文件加密文件加密是一种将文件内容转换为密文的过程,以保护文件的机密性和安全性。
C语言作为一种高级编程语言,可以用于实现文件加密功能。
在C语言中,我们可以使用文件操作和加密算法来实现文件加密。
首先,我们需要使用C语言的文件操作函数打开要进行加密的文件。
可以使用fopen函数打开文件,并使用"r"或"w"的模式来打开文件进行读取或写入操作。
例如,可以使用以下代码打开名为input.txt的文件进行读取:```cFILE *fp;fp = fopen("input.txt", "r");```接下来,我们需要遍历读取文件的内容,并对每个字符进行加密操作。
加密算法的选择可以根据需求而定,常见的加密算法包括异或算法、AES算法等。
在这里,我们以异或算法为例进行说明。
异或算法是一种简单的加密算法,它通过将明文和密钥进行异或操作得到密文。
加密和解密时使用相同的密钥。
以下是一个使用异或算法对文件内容进行加密的示例代码:```cvoid encryptFile(FILE *inFile, FILE *outFile, char *key)int ch;int keyLen = strlen(key);int i = 0;while ((ch = fgetc(inFile)) != EOF)fputc(ch ^ key[i], outFile);i = (i + 1) % keyLen;}```在上述代码中,我们通过循环从输入文件中读取每个字符,并通过异或运算操作以密钥进行加密,然后将加密后的字符写入输出文件。
最后,我们需要关闭打开的文件,释放文件资源。
可以使用fclose函数关闭文件,如以下示例代码所示:```cfclose(fp);```这是一个简单的文件加密实现示例,但需要注意的是,这只是一种基础的加密方法。
在实际应用中,为了加强文件的安全性,我们可能需要考虑使用更强大的加密算法和更复杂的加密方式,以及其他的安全措施。
C语⾔实现加密解密功能加密主要是通过⼀种算法对原内容进⾏处理,使原来内容不直观可见。
解密过程通常要知道加密的算法,然后对加密后的内容进⾏逆处理,从⽽实现解密功能。
当然解密也有⼀些暴⼒破解的⽅法。
接下来以 c 语⾔为例讲解⼀种简单的加密解密以及暴⼒破解字符串的⽅法,带您⾛进加密解密技术的⼤门。
先讲⼀下凯撒加密,凯撒密码相传是古罗马凯撒⼤帝⽤来保护重要军情的加密系统。
它是⼀种置换密码,通过将字母顺序推后起到加密作⽤。
如字母顺序推后 3 位,字母 A 将被推作字母 D,字母 B 将被推作字母 E。
本实例类似于凯撒加密。
加密算法:⼤(⼩)写字母加密后还为⼤(⼩)写字母。
⼤(⼩)写字母向后推 n 位,n 由⽤户输⼊,如果超出⼤(⼩)写字母的 ASCII 范围,则返回⾄第⼀个⼤(⼩)写字母继续循环。
解密算法(与加密算法正好相反):⼤(⼩)写字母解密后还为⼤(⼩)写字母。
⼤(⼩)写字母向前推 n 位,n 由⽤户输⼊,如果超出⼤(⼩)写字母的 ASCII 范围,则返回⾄最后⼀个⼤(⼩)写字母继续循环。
代码如下:/*字符串加密解密程序凯撒加密*/#include <stdio.h>#include <stdlib.h>#include <string.h>//函数encode()将字母顺序推后n位,实现⽂件加密功能void encode(char str[],int n){char c;int i;for(i=0;i<strlen(str);++i){ //遍历字符串c=str[i];if(c>='a' && c<='z'){ //c是⼩写字母if(c+n%26<='z'){ //若加密后不超出⼩写字母范围str[i]=(char)(c+n%26); //加密函数}else{ //加密后超出⼩写字母范围,从头开始循环⼩写字母str[i]=(char)(c+n%26-26);}}else if(c>='A' && c<='Z'){ //c为⼤写字母if(c + n%26 <= 'Z'){ //加密后不超出⼤写字母范围str[i]=(char)(c+n%26);}else{ //加密后超出⼤写字母范围,从头开始循环⼤写字母str[i]=(char)(c+n%26-26);}}else{ //不是字母,不加密str[i]=c;}}printf("\nAfter encode: \n");puts(str); //输出加密后的字符串}//decode()实现解密功能,将字母顺序前移n位void decode(char str[],int n){char c;int i;//遍历字符串for(i=0;i<strlen(str);++i){c=str[i];//c为⼩写字母if(c>='a' && c<='z'){//解密后还为⼩写字母,直接解密if(c-n%26>='a'){str[i]=(char)(c-n%26);}else{//解密后不为⼩写字母了,通过循环⼩写字母处理为⼩写字母str[i]=(char)(c-n%26+26);}}else if(c >= 'A' && c<='Z'){ //c为⼤写字母if(c-n%26>='A'){ //解密后还为⼤写字母str[i]=(char)(c-n%26);}else{ //解密后不为⼤写字母了,循环⼤写字母,处理为⼤写字母str[i]=(char)(c-n%26+26);}}else{ //⾮字母不处理str[i]=c;}}printf("\nAfter decode: \n");puts(str); //输出解密后的字符串}//该函数代码有冗余,读者可改进int main(){char str[50];int k=0,n=0,i=1;printf("\nPlease input strings: ");scanf("%s",str); //输⼊加密解密字符串//打印菜单printf("-----------------\n");printf("1: Encryption\n");printf("2: Decryption\n");printf("3: Violent Crack\n"); //暴⼒破解printf("-----------------\n");printf("\nPlease choose: ");scanf("%d",&k);if(k==1){ //加密printf("\nPlease input number: ");scanf("%d",&n);encode(str,n);}else if(k==2){ //解密printf("\nPlease input number: ");scanf("%d",&n);decode(str,n);}else{for(i=1;i<=25;++i){ //尝试所有可能的n值进⾏暴⼒破解printf("%d ",i);decode(str,i);}}return 0;}测试运⾏如下:成功实现加密解密功能,读者可以稍加改造完成对⽂件的加密解密以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
c语言课程设计-文件加密解密(含源代码)C语言课程设计实验报告实验名称:文件加密解密院系:软件学院学号:日期:2012年9月3日—9月17日一:设计题目1:设计图形用户界面。
2:对文件进行加密并对加密文件进行保存。
3:对加密了的文件进行解密。
二:设计过程设计过程中遇到的困难和解决方法:1:不能很好地理解题意(通过老师的讲解)。
2:不知道如何设计加密解密程序(通过翻阅书籍和上网查找资料) 过程:首先通过学习老师提供的资料了解大致的设计过程并懂得运用一些以前没有学习过的c语言。
先利用文本文件设计出加密解密的主要过程并能运行。
知道如何运用fopen将原文件打开并用fread将原文件内容读出来,然后进行加密设计并将加密的数据用fwrite写进指定的文件中并保存。
然后读出加密的文件并解密并保存。
最后在写出的程序中加入图形用户界面,运用window,box,gotoxy等进行设计。
三:源代码#include <stdio.h>/* 标准输入、输出函数*/ #include /* 标准库函数*/#include <string.h> //*字符串处理函数*/#include /* 字符操作函数*/#include#include <dos.h>#define key_down80#definekey_up 72#definekey_esc 1#define key_enter 28#defineSIZE 1void box(int startx,int starty,int high,intwidth);int get_key();char buf[20*20*4];/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////加密解密*/voidfun(char*list,char *sd)/*加密过程*/{FILE*fp1,*fp2;char buf[1000]; /*文件临时存放处*/register intch;fp1=fopen("e:\list.txt","r"); /*用可读方式打开文件*/fp2=fopen("e:\sd.txt","w"); /*用可写方式创建一个文件*/if(fp1==NULL){printf("cannot openfile\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=f getc(fp1);}rewind(fp2); /*将光标移动到第一个字符前面*/fread(buf,sizeof(buf),1,fp2); /*从文件的当前位置开始中读取buf中存放的数据*/printf("%s",buf);/*fclose(fp1);fclose(fp2);*/}void man(char *sd,char *ds)/*解密过程*/{/*int n=0;*/FILE *fp2,*fp3;register int fh;char buf1[1000];fp2=fopen("e:\sd.txt","rb"); /*用可读方式打开文件*/fp3=fopen("e:\ds.txt","wb"); /*用可写方式创建一文件*/ if(fp2==NULL){printf("cannot open file\n");exit(1);}if(fp3==NULL){printf("cannot build file\n");exit(1);}fh=fgetc(fp2); /*从光标处读出一个字符*/while(!feof(fp2)) /*当读出的字符到达最后一个则停止*/{fh=fh>>1; /*解密方式*/fputc(fh,fp3);/*解密的字符存放在指定的地方*/fh=fgetc(fp2);}fread(buf1,sizeof(buf1),1,fp3); /*读出buf1中所存放的数据*/printf("%s",buf1);}void main(){int k;char*f[]={"jiami","jiemi"};/**界面的形式/ intke y,y;int j,q;char list[300];char sd[300];char ds[300];char ch,fh;char buf[1000];char buf1[1000];FILE *fp1;FILE*fp2;intl1,l2;window(1,1,80,25); /*left,top,right,bottom,相对于屏幕的字符坐标,屏幕原点在左上角*/gettext( 20,10,40,14,buf); /*保存矩形屏幕上的字符*/textbackground(7); /*背景颜色*/textcolor(0);/*字体颜色*/clrscr(); /*清除矩形屏幕上的所有字符*/gotoxy(24,10); /*将当前字符屏幕的光标位置移动到x,y的坐标位子*/printf("%s",f[0]);gotoxy(24,14);printf("%s",f[1]);gettext(10,8,60,16,buf);box(22,9,3,30);/*建立一个小窗口*/key=0;while(1){ while(bioskey(1)==0); /*读取键盘值查询键盘是否按下*/key=get_key(); /*按下了什么键盘*/if(key==key_up||key==key_down){y=wherey(); /*得到字符模式下窗口光标的x坐标数值*/if(key==key_up)y=y==10? y+4:10;/*当y=10光标向下移动四个位置否则将光标移动到y=10处*/if(key==key_down)y=y==14? y-4:14; /*当y=14光标向下移动四个位置否则将光标移动到y=14处*/puttext(10,8,60,16,buf); /*将gettext函数保存的字符恢复到屏幕上*/gotoxy(24,y);if(y==10){ textbackground(7);textcolor(0);box(22,9,3,30);textbackground(3);textcolor(15);gotoxy(24,y);cprintf("%s",f[0]);}else{ textbackground(7);textcolor(0);box(22,13,3,30);textbackground(3);textcolor(15);gotoxy(24,y);cprintf("%s",f[1]);}}if(key==key_enter&&y==10)且光标在y=10处 /*当按下enter键且光标在y=10处进行下步*/{clrscr();textbackground(3);textcolor(15);/*clrscr(); */gotoxy(24,5);printf("input the file name for jiami\n");/*用户给需要加密的文件加密*/l1=strlen("input the file name for jiami:"); /*待求长度的字符串指针*/gotoxy(24+l1,5);scanf("%s",list);gotoxy(24,10);printf("input file name forsave\n");/*给加密后的文件命名,并保存*/l2=strlen("input file name forsave:");gotoxy(24+l2,10);scanf("%s",sd);fun(list,sd);fp1=fopen("e:\sd.txt","rb");fread(buf1,sizeof(buf1),1,fp1);gotoxy(10,15);printf("%s\n",buf1);getch();printf("file haven jiami ,save now");getche(); break;}if(key==key_enter&&y==14){clrscr();textbackground(3);textcolor(15);gotoxy(24,5);printf("input the file namefor jiemi \n");/*用户给需要解密的文件解密 */l1=strlen("input the file namefor jiemi: ");gotoxy(24+l1,5);scanf("%s",sd);gotoxy(24,10);printf("input file name for save:\n");/*对解密的文件系统又可以提供保存路径 */l2=strlen("input file name for s ave: ");gotoxy(24+l2,10);scanf("%s",ds);man(sd,ds);fp2=fopen("e:\ds.txt","rb");fread(buf1,sizeof(buf1),1,fp2);gotoxy(10,15);printf("%s\n",buf1);getch();printf("file haven jiemi,save now");getche();break;}}window(1,1,80,25);gettext( 20,10,40,14,buf);textbackground(7);textcolor(0);clrscr();gotoxy(24,10);printf("%s",f[0]);gotoxy(24,14);printf("%s",f[1]);gettext(10,8,60,16,buf);box(22,9,3,30);key=0;while(1){ while(bioskey(1)==0);key=get_key();if(key==key_up||key==key_down) {y=wherey();if(key==key_up)y=y==10? y+4:10;if(key==key_down)y=y==14?y-4:14;puttext(10,8,60,16,buf);gotoxy(24,y);if(y==10) /*光标在10处的窗口*/{ textbackground(7);textcolor(0);box(22,9,3,30);textbackground(3);textcolor(15);gotoxy(24,y);cprintf("%s",f[0]);}else{ textbackground(7);textcolor(0);box(22,13,3,30);textbackground(3);textcolor(15);gotoxy(24,y);cprintf("%s",f[1]);}}if(key==key_enter&&y==10){clrscr();textbackground(3);textcolor(15);/*clrscr(); */gotoxy(24,5);printf("input thefile name for jiami\n");/*用户给需要加密的文件加密 */l1=strlen("input the file name for jiami:");gotoxy(24+l1,5);scanf("%s",list);gotoxy(24,10);printf("input file name for save\n");/*给加密后的文件命名,并保存*/l2=strlen("input file name for save:");gotoxy(24+l2,10);scanf("%s",sd);fun(list,sd);fp1=fopen("e:\sd.txt","rb");fread(buf1,sizeof(buf1),1,fp1);gotoxy(10,15);printf("%s\n",buf1);getch();printf("file haven jiami ,save now");getche();}if(key==key_enter&&y==14){clrscr();textbackground(3);textcolor(15);gotoxy(24,5);printf("input the file name for jiemi \n");/*用户给需要解密的文件解密*/l1=strlen("input the file name forjiemi:");gotoxy(24+l1,5);scanf("%s",sd);gotoxy(24,10);printf("input filenamefor save:\n");/*对解密的文件系统又可以提供保存路径*/l2=strlen("input file name for save: ");gotoxy(24+l2,10);scanf("%s",ds);man(sd,ds);fp2=fopen("e:\ds.txt","rb");fread(buf1,sizeof(buf1),1,fp2);gotoxy(10,15);printf("%s\n",buf1);getch();printf("file haven jiemi,save now");getche();break;}}}int get_key(){union REGS rg;rg.h.ah=0;int86(0x16,&rg,&rg);return rg.h.ah;getchar();}void box(intstartx,int starty,int high,intwidth) /*屏幕的建立*/{int i;gotoxy(startx,starty);putch(0xda);for (i=startx+1;i <width;i++)< p="">putch(0xc4);putch(0xbf);for(i=starty+1;i <high+starty;i++){gotoxy(startx,i);putch(0xb3);gotoxy(width,i);putch(0xb3);}gotoxy(startx,starty+high-1);putch(0xc0);gotoxy(startx+1,starty+high-1);for(i=startx+1;i <width;i++)< p="">putch(0xc4);putch(0xd9);return;}四:心得体会通过这次的作业我觉得最大的收获是不仅把平时学习到的知识理解的更加透彻,而且使知识更加系统化,同时还把有些平时不太注意的小问题发现了出来,这不但有利于我学习C语言,而且对于我学习任何一门课程都是很有益处的。
c语言实现加密解密加密程序代码:#include<stdio.h>main(){char c,filename[20];FILE *fp1,*fp2;printf("请输入待加密的文件名:\n"); scanf("%s",filename);fp1=fopen(filename,"r");fp2=fopen("miwen.txt","w");do{c=fgetc(fp1);if(c>=32&&c<=126){c=c-32;c=126-c;}if(c!=-1)fprintf(fp2,"%c",c);}while(c!=-1);}解密程序代码:#include<stdio.h>#include<string.h>main(){char c,filename[20];char yanzhengma[20];FILE *fp1,*fp2;printf("请输入待解密文件名:\n"); scanf("%s",filename);printf("请输入验证码:\n");scanf("%s",yanzhengma);if(strcmp(yanzhengma,"shan")==0) {fp1=fopen(filename,"r");fp2=fopen("yuanwen.txt","w"); do{c=fgetc(fp1);if(c>=32&&c<=126){c=126-c;c=32+c;}if(c!=-1)fprintf(fp2,"%c",c);}while(c!=-1);}else{printf("验证码错误!请重新输入:\n");scanf("%s",filename);}}运行结果:文件加密:如需要加密的文件名为yusnwen.txt,则屏幕显示为:如yuanwen.txt内容为:qing dao li gong da xue tong xin yu dian zi gong cheng xue yuan 2006 ji dain zi xin xi gong cheng zhuan ye2009 05 17加密后得到的密文miwen.txt为:-507~:=/~25~7/07~:=~&)9~*/07~&50~%)~:5=0~$5~7/07~;6907~&)9~%)=0~lnnh~45~:=50~$5~&50~&5~7/07~;6907~ $6)=0~%9~~~lnne~ni~mg文件解密:如需解密的文件即为上面加密后的文件miwen.txt,则:当验证码正确时,屏幕显示:得到的原文如加密时的原文。
c语言课程设计-文件加密解密(含源代码)
概述
本文主要介绍如何使用c语言进行文件的加密和解密操作,同时提供相应的源
代码。
文件加密是一种保护文件数据的方法,使得未经许可的用户无法读取或修改加密过的文件。
而文件解密则是将加密文档还原为可读的文件。
实现
本程序使用C语言实现文件的加密和解密操作,主要包括如下步骤:
1.读取待加密/解密的文件
2.处理文件数据,进行加密/解密操作
3.将处理后的数据写入到新的文件中
为了保证数据的加密强度,本程序使用了简单的异或运算进行加密/解密操作。
加密和解密时使用的密钥是相同的,用户可以自行指定。
程序会根据密钥对每个文件字节进行异或操作,加密后的文件字节和原文件字节不同,保证数据的安全性。
源代码
以下是文件加密和解密的C语言代码。
其中encrypt函数用于加密,decrypt
函数用于解密,用户需要根据不同的需求进行调用。
```c #include <stdio.h> #include <stdlib.h> #include <string.h>
//加密函数 void encrypt(const char* input_filename, const char*
output_filename, const char* key){ FILE input_file, output_file; char ch; int i = 0;
input_file = fopen(input_filename, \。
c 课程设计加密解密一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握加密解密的基本概念、原理和方法;技能目标要求学生能够运用加密解密技术解决实际问题;情感态度价值观目标要求学生增强信息安全意识,提高信息保护能力。
通过分析课程性质、学生特点和教学要求,我们将目标分解为具体的学习成果。
课程目标旨在培养学生的信息素养,使他们在理解加密解密的基础上,能够运用所学知识解决实际问题,提高信息保护意识,增强信息安全防护能力。
二、教学内容本课程的教学内容主要包括加密解密的基本概念、原理和方法,以及实际应用案例。
具体包括以下几个方面:1.加密解密基本概念:对称加密、非对称加密、哈希函数等。
2.加密解密原理:加密解密算法、密钥管理、数字签名等。
3.加密解密方法:加密软件使用、网络通信安全、数据保护等。
4.实际应用案例:加密解密技术在现实生活中的应用,如电子邮件、移动支付等。
教学大纲将按照教材的章节安排,循序渐进地教学内容,确保学生能够系统地掌握加密解密知识。
三、教学方法为激发学生的学习兴趣和主动性,我们将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。
1.讲授法:讲解加密解密的基本概念、原理和方法。
2.讨论法:学生讨论实际应用案例,提高学生解决问题的能力。
3.案例分析法:分析加密解密技术在现实生活中的应用,增强学生的实践能力。
4.实验法:引导学生动手实践,提高学生的实际操作能力。
四、教学资源本课程将选用合适的教学资源,包括教材、参考书、多媒体资料、实验设备等。
教学资源将支持教学内容和教学方法的实施,丰富学生的学习体验。
1.教材:选用权威、实用的教材,为学生提供系统、全面的知识体系。
2.参考书:推荐相关参考书籍,拓展学生的知识视野。
3.多媒体资料:制作精美的PPT、视频等多媒体资料,提高学生的学习兴趣。
4.实验设备:配置相应的实验设备,确保学生能够顺利进行实验操作。
C语言加密与解密算法的实现与应用密码学是信息安全领域的重要分支之一,加密与解密算法是密码学中的核心概念。
在本文中,我们将讨论C语言中加密与解密算法的实现与应用,介绍几种常见的算法,并为读者提供实用的示例代码。
1. 对称加密算法对称加密算法是指加密和解密使用相同密钥的算法。
C语言中常用的对称加密算法有DES(Data Encryption Standard)和AES(Advanced Encryption Standard)。
下面以AES算法为例进行介绍。
AES算法是一种高级加密标准,广泛应用于各种领域的数据保护中。
C语言中可以使用openssl库来实现AES算法的加密和解密操作。
以下为一个简单的AES加密和解密的示例代码:```c#include <openssl/aes.h>#include <string.h>int aes_encrypt(const unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *ciphertext) {AES_KEY aesKey;AES_set_encrypt_key(key, 128, &aesKey);AES_encrypt(plaintext, ciphertext, &aesKey);return 0;int aes_decrypt(const unsigned char *ciphertext, int ciphertext_len, unsigned char *key, unsigned char *plaintext) {AES_KEY aesKey;AES_set_decrypt_key(key, 128, &aesKey);AES_decrypt(ciphertext, plaintext, &aesKey);return 0;}int main() {unsigned char key[] = "0123456789012345";unsigned char plaintext[] = "Hello, World!";unsigned char ciphertext[128];unsigned char decryptedtext[128];aes_encrypt(plaintext, strlen((char *)plaintext), key, ciphertext);aes_decrypt(ciphertext, strlen((char *)ciphertext), key, decryptedtext);printf("Plaintext: %s\n", plaintext);printf("Ciphertext: %s\n", ciphertext);printf("Decrypted text: %s\n", decryptedtext);return 0;```2. 非对称加密算法非对称加密算法使用一对密钥,分别为公钥和私钥。
C语言加密与解密算法详解1. 引言在信息时代,数据的保密性至关重要。
加密与解密算法是一种重要的保护数据安全性的技术手段。
本文将详细介绍C语言中的加密与解密算法,包括常用的对称加密算法和非对称加密算法。
2. 对称加密算法2.1 Caesar密码Caesar密码是一种简单的替换密码算法,通过将每个字母向后移动固定的位数来加密消息。
解密操作是将每个字母向前移动相同的位数。
2.2 DES算法数据加密标准(DES)是一种对称加密算法,使用56位的密钥对64位的数据进行加密。
DES算法通过多轮迭代和复杂的置换与代换操作来实现高强度的加密。
3. 非对称加密算法3.1 RSA算法RSA算法是一种常用的非对称加密算法。
它通过使用两个密钥:一个公钥和一个私钥,来实现加密和解密操作。
发送方使用接收方的公钥进行加密,而接收方使用自己的私钥进行解密。
3.2 椭圆曲线加密算法椭圆曲线加密算法(ECC)是一种基于椭圆曲线数学原理的非对称加密算法。
它具有较小的密钥长度和高安全性的特点,适用于资源受限的设备。
4. 加密与解密实例4.1 使用Caesar密码加密与解密字符串下面是使用C语言实现Caesar密码算法的示例代码: ```// Caesar密码加密函数void caesarEncrypt(char* text, int key) {int i = 0;while (text[i] != '\0') {if (isalpha(text[i])) {if (islower(text[i])) {text[i] = (text[i] - 'a' + key) % 26 + 'a';} else {text[i] = (text[i] - 'A' + key) % 26 + 'A';}}i++;}}// Caesar密码解密函数void caesarDecrypt(char* text, int key) {caesarEncrypt(text, 26 - key);}```4.2 使用RSA算法加密与解密数据下面是使用C语言中的openssl库实现RSA算法的示例代码:```// RSA加密函数int rsaEncrypt(unsigned char* plainText, int plainTextLen, unsigned char* encryptedText) {// 使用公钥进行加密操作// ...}// RSA解密函数int rsaDecrypt(unsigned char* encryptedText, int encryptedTextLen, unsigned char* decryptedText) {// 使用私钥进行解密操作// ...}```5. 总结加密与解密算法在数据保密性方面发挥着重要的作用。
C语言加解密算法详解在当今信息化时代,数据的安全性和保密性变得愈发重要。
为了保护数据免遭不法分子的窃取或篡改,加密算法成为了一种常见的数据保护手段。
C语言作为一种广泛应用的编程语言,也提供了丰富的加解密算法库。
本文将详细介绍C语言中常用的加解密算法,并对其原理进行解析。
1. 凯撒密码凯撒密码是一种简单的字母替换加密算法,它通过将明文中的每个字母按照字母表中的顺序向后(或向前)移动固定的位置来进行加密。
例如,将明文字符'A'移动3个位置后,得到密文字符'D'。
解密时,只需将密文字符反向移动相同位置即可还原为明文字符。
凯撒密码的算法实现非常简单,可以使用C语言中的字符操作函数和条件语句来完成。
以下是一个使用凯撒密码加密字符串的示例代码:```c#include <stdio.h>void caesar_encrypt(char *str, int key) {int i = 0;while (str[i] != '\0') {if (str[i] >= 'A' && str[i] <= 'Z') {str[i] = ((str[i] - 'A') + key) % 26 + 'A';}else if (str[i] >= 'a' && str[i] <= 'z') {str[i] = ((str[i] - 'a') + key) % 26 + 'a';}i++;}}int main() {char str[100] = "Hello, World!";int key = 3;caesar_encrypt(str, key);printf("Encrypted string: %s\n", str);return 0;}```2. DES算法DES(Data Encryption Standard)是一种对称分组密码算法,使用56位的密钥对64位的数据进行加密和解密。
C语言中的加密与解密算法实现在计算机科学领域中,数据的加密与解密是非常重要的安全技术,它能够确保我们在网络通信或存储数据时的隐私和安全性。
C语言作为一种广泛应用的编程语言,也提供了多种加密与解密算法的实现方式。
本文将介绍C语言中常用的加密与解密算法以及它们的实现原理。
一、凯撒密码凯撒密码是一种简单的替换密码,通过将字母按照指定的偏移量进行移位来实现加密和解密。
偏移量就是将字母移动的位数,例如偏移量为1,则将字母A替换为B,B替换为C,以此类推。
以下是凯撒密码的C语言实现示例:```c#include <stdio.h>#include <string.h>void caesar_encrypt(char* message, int offset) {int i;for(i = 0; i < strlen(message); i++) {if(message[i] >= 'a' && message[i] <= 'z') {message[i] = (message[i] - 'a' + offset) % 26 + 'a';}else if(message[i] >= 'A' && message[i] <= 'Z') {message[i] = (message[i] - 'A' + offset) % 26 + 'A';}}}void caesar_decrypt(char* message, int offset) {int i;for(i = 0; i < strlen(message); i++) {if(message[i] >= 'a' && message[i] <= 'z') {message[i] = (message[i] - 'a' - offset + 26) % 26 + 'a'; }else if(message[i] >= 'A' && message[i] <= 'Z') {message[i] = (message[i] - 'A' - offset + 26) % 26 + 'A'; }}}int main() {char message[100];int offset;printf("请输入要加密的信息:");gets(message);printf("请输入偏移量:");scanf("%d", &offset);caesar_encrypt(message, offset);printf("加密后的信息是:%s\n", message);caesar_decrypt(message, offset);printf("解密后的信息是:%s\n", message);return 0;}```以上代码可以让用户输入要加密的信息和偏移量,并在加密和解密后输出结果。
C语言中的加密与解密算法实现在计算机编程领域中,加密与解密算法的实现是非常重要的。
通过加密算法,可以将敏感数据进行保护,以防止未经授权的访问。
同时,解密算法则用于将加密过的数据恢复为原始数据。
本文将介绍C语言中加密与解密算法的实现方法,并探讨一些常用的加密算法。
一、加密算法的实现方法加密算法的实现可以采用C语言中的各种方法和技术。
下面列举了几种常用的加密算法实现方法:1. 移位加密算法移位加密算法是一种简单的加密算法,它通过将字符的ASCII码值向右移动若干位来实现。
例如,将字符'A'的ASCII码值向右移动1位,即可得到字符'B'的ASCII码值。
移位加密算法的实现如下:```cvoid encryptShift(char* message, int key) {int i = 0;while (message[i] != '\0') {message[i] = message[i] + key; // 向右移动key位i++;}}```2. 替换加密算法替换加密算法是通过将字符替换为其他字符来实现加密的。
替换加密算法可以使用预定义的映射表或通过自定义映射关系来实现。
例如,将字符'A'替换为字符'Z',将字符'B'替换为字符'Y',以此类推。
替换加密算法的实现如下:```cvoid encryptSubstitution(char* message) {int i = 0;while (message[i] != '\0') {if (message[i] >= 'A' && message[i] <= 'Z') {message[i] = 'Z' - (message[i] - 'A'); // 替换为对应的字符}i++;}}```3. 数字加密算法数字加密算法主要用于加密数字,例如将手机号码、银行账号等敏感数字进行保护。
程序报告设计题目:加密解密处理程序设计报告的电子文档(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倍行距)二、需求分析(格式:宋体,4号,加粗,两端对齐)在该部分中叙述每个模块的功能要求(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)概要设计(格式:宋体,4号,加粗,两端对齐)在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义,如果用面向对象的方法,应该给出类中成员变量和成员函数原型声明)。
C# 设置Word文档保护(加密、解密、权限设置)对于一些重要的word文档,出于防止资料被他人查看,或者防止文档被修改的目的,我们在选择文档保护时可以选择文档打开添加密码或者设置文档操作权限等,在下面的文章中将介绍如何使用类库Free Spire.Doc for .NET来加密、解密以及给文档设置操作权限等,主要分为以下几个要点来具体阐述●添加Word密码保护●解除Word密码保护●设置word文档操作权限●设置Word部分内容编辑权限工具使用: 安装Free Spire.Doc之后,在程序中引用Spire.Doc.dll即可(dll可以在安装路径下的Bin文件夹中获取)1.Word文档加密C#using Spire.Doc;namespace EncryptWord_Doc{class Program{staticvoid Main(string[] args){//初始化一个Document类实例并加载需要加密的Word文档Document doc = new Document(@"C:\Users\Administrator\Desktop\sample.docx");//设置打开Word文档的密码doc.Encrypt("abc123");//保存并打开文档doc.SaveToFile("加密文件.docx", FileFormat.Docx2013);System.Diagnostics.Process.Start("加密文件.docx");}}}调试运行程序,生成文档后,可见如下文档效果:正确输入密码后就可以打开文档了。
2.Word文档解密C#using Spire.Doc;namespace DecryptWord_Doc{class Program{staticvoid Main(string[] args){//初始化一个Document类实例Document doc = new Document();//加载密码参数为"adc123"的Word文档doc.LoadFromFile("加密文件.docx", FileFormat.Docx2013, "abc123");//调用方法RemoveEncryption()解除密码保护doc.RemoveEncryption();//保存文档并打开文档doc.SaveToFile("解密文件.docx", FileFormat.Docx2013);System.Diagnostics.Process.Start("解密文件.docx");}}}此时打开文档时已经没有密码保护了。
课程设计报告课程设计名称: C语言程序设计指导教师:学生:学号:学院:电子信息工程学院完成时间: 2011年9月27日嘉应学院电子信息工程学院1C语言课程设计说明书目录1 需求分析 (1)2总体设计 (2)3详细设计 (3)3.1 换位加密流程图 (3)3.2 换位解密流程图 (4)3.3 替代加密流程图 (5)3.4 替代解密流程图 (6)4调试与测试 (8)5测试结果 (8)6附录 (11)I1 需求分析问题描述(实验指导书中已经给出)①数据的输入和输出;要求使用文件操作。
文件(明文,仅限于英文字母)存放在某一已知文本文件中,加密后的文件(密文)存放在另一文件中。
②换位加密和解密:加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文;③凯撒加密和解密:加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文;④统计单词的个数;⑤退出。
2总体设计(程序设计总流程图,可以画带流程线的流程图)此处只需要写出一个流程图就可以了,就是总的那个流程图,请规范的画图。
不需要分出2.1和2.2.开始welcome()caidan()transpen( ); transpde()caesaren()caesarde() mingwent miwentongji(byebye()3详细设计(各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等这块大家问题最多了,这里不是写程序代码,而是写流程图里面各个主要函数的作用,函数之间关系的说明。
以第1题为例,此处应为:3.1 换位加密流程图流程图(对流程图加以说明。
可以把关键语句放在此处,加以注释说明) 建立mingwen.txt 和miwen.txt 文件输入密钥n输入明文到数组rk=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=0for i=0 to hang for i=m to hang*nz=0fputc(r[i],mingwen) 将明文存放到mingwen.txt文件中for j=0 to n h[i]='a'+j j++for i=0 to hangzl[i][j]=h[z] z++ for j=o to nzl[i][j]=h[z]z++for i=0 to nfor j=0 to hanghe[z]=zl[j][i]输出he[z]z++fputc(zl[j][i],miwen)fclose() 关闭并保存mingwen.txt文件fclose() 关闭并保存miwen.txt文件清屏返回菜单3.2 换位解密流程图流程图(对流程图加以说明。
可以把关键语句放在此处,加以注释说明)建立mingwen.txt和miwen.txt文件输入密钥n输入明文到数组rk=strlen(r)j 计算数组r长度for i=0 to kfputc(r[i],miwen) 将密文存放到miwen.txt文件中关闭并保存miwen.txt文件打开miwen.txt文件space(h,r) 将明文去空格并放到数组h中m=strlen(h) 计算数组h长度m%n==0是 否hang=m/n hang=m/n+1 j=0for i=0 to n for i=m to hang*nz=0for i=0 to hangfclose(mingwen) 关闭并保存mingwen.txt 文件fclose(miwen) 关闭并保存miwen.txt 文件清屏 返回菜单3.3 替代加密流程图流程图(对流程图加以说明。
可以把关键语句放在此处,加以注释说明)建立mingwen.txt 和miwen.txt 文件ch=getchar() 接收回车字符Ch=getchar() 开始输入明文当ch!='\n'fclose(mingwen)) 关闭并保存mingwen.txt 文件for j=0 to hang h[i]='a'+j j++for i=0 to nzl[i][j]=h[z] z++ for j=o to hangzl[i][j]=h[z]z++for j=0 to nhe[z]=zl[j][i]输出he[z]z++fputc(zl[j][i],mingwen)fputc(ch,mingwen) 将明文放到mingwen.txt 文件中ch=getchar()输入密钥 i直到!(i>=0&&i<=26)成立打开mingwen.txt文件ch=fgetchar(mingwen) 开始从明文中读出字符当ch!=EOF(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')是否 ch=ch+i;ch>'Z'&&ch<='Z'+i||ch>'z'是否ch=ch-26fputc(ch,miwen)输出chch=fgetc(mingwen)fclose(mingwen) 关闭并保存mingwen.txt文件fclose(miwen); 关闭并保存miwen.txt文件清屏返回菜单3.4 替代解密流程图流程图(对流程图加以说明。
可以把关键语句放在此处,加以注释说明)建立mingwen.txt和miwen.txt文件ch=getchar() 接收回车字符Ch=getchar() 开始输入明文当ch!='\n'fputc(ch,mingwen) 将明文放到mingwen.txt文件中ch=getchar()fclose(mingwen)) 关闭并保存mingwen.txt文件输入密钥 i直到!(i>=0&&i<=26)成立打开mingwen.txt文件ch=fgetchar(mingwen) 开始从明文中读出字符当ch!=EOF(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z') 是否 ch=ch+i;ch>'Z'&&ch<='Z'+i||ch>'z'是否ch=ch+26fputc(ch,mingwen)输出chch=fgetc(miwen)fclose(mingwen) 关闭并保存mingwen.txt文件fclose(miwen); 关闭并保存miwen.txt文件清屏返回菜单4调试与测试(调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施)调试程序,描述测试过程中遇到的问题和解决办法1.文件操作时打开的文件应该及时关闭,不然不会保存,在下次打开时就读不到以前存放在该文件里面的数据,而编译时却不会提示有错误。
2..函数调用时,被调函数必须在前面声明或者写在调用函数的上面,不然在编译时也不会提示错误,程序却不能执行。
3.空格的去除;采用指针的方法将去除空格的字符串放到另一个数组中4.菜单函数的容错;用default:system("cls"); caidan();实现。
5. 加密解密后返回主菜单;在每个函数后面加ch=getchar();ch=getchar();system("cls");caidan();第一个h=getchar()接收回车字符,第二个ch=getchar()使屏幕上的显示暂停,并实现返回主菜单的操作。
5测试结果(用几组测试数据进行测试算法设计的正确性,要包括测试数据和运行结果)。
此处需要给出你输入的源码,以及程序运行后出来的结果,可以适当的截图。
1:换位加密源码:Ce shi jie guo密钥:4运行结果:Cigejusiohea2换位解密源码:Cigejusiohea密钥:4运行结果:Ceshijieguoa3凯撒加密源码:Ce shi jie guo密钥:4运行结果:Gi wlm nmi kys4:凯撒解密源码:Gi wlm nmi kys 密钥:4运行结果:Ce shi jie guo5.明文统计6.密文统计6附录(源程序清单和结果:源程序要加注释)此处需要些出你的源程序代码,以及对主要代码的一些功能或作用说明。
#include<stdio.h>#include<stdlib.h>#include<string.h>char a[]={"mingwen.txt"},b[]={"miwen.txt"};welcome() //欢迎界面{printf("\n\n\n\n\n\n\n\n\n\t\t****************************************\n\n");printf("\t\t\t简朴寨加密解密欢迎您\n\n");printf("\t\t****************************************\n");printf("\n\n\n\n\n\n\t\t\t\t\t\t\t电信101班陈仁波\n");}byebye() //退出界面{printf("\n\n\n\n\n\n\n\n\n\t\t**************************************\n");printf("\t\t**************************************\n\n");printf("\t\t\t\t欢迎使用\n\n");printf("\t\t**************************************\n");printf("\t\t**************************************\n");}tuichu() //退出菜单{ char tc;printf("\n\n\n\n\n\n\n\n\n\t\t********************************************\n\n");printf("\t\t\t\t 确定退出???\n\n");printf("\t\t\t 确定请按Y, 取消请按N\n\n");printf("\t\t********************************************\n");tc=getchar();tc=getchar();if(tc=='n'||tc=='N'){system("cls");caidan();}else if(tc=='y'||tc=='Y'){system("cls");byebye();}else{ system("cls");tuichu();}}char *space(char *a,char *b)// 去空格{char *c = a;int n =0;while (*b!='\0'){if (*b!=' '){*c = *b;n++;c++;}b++;}*c='\0';}transpen() //换位加密{FILE *mingwen,*miwen;int i,j,n,m,k,z=0,hang;char ch;char r[1000],h[100],zl[10][10],he[100];if((mingwen=fopen(a,"w+"))==NULL){printf("不能打开文件\n");exit(0);}if((miwen=fopen(b,"w+"))==NULL){printf("不能打开文件\n");exit(0);}printf("请输入密钥\n");scanf("%d",&n);printf("请输入明文\n");ch=getchar();gets(r);k=strlen(r);for(i=0;i<k;i++)fputc(r[i],mingwen);fclose(mingwen);if((mingwen=fopen(a,"r"))==NULL){printf("不能打开文件\n");exit(0);}space(h,r);m=strlen(h);if(m%n==0){hang=m/n;for(i=0;i<hang;i++){for(j=0;j<n;j++){zl[i][j]=h[z];z++;}}}else{hang=m/n+1;j=0;for(i=m;i<(hang*n);i++){h[i]='a'+j;j++;}for(i=0;i<hang;i++){for(j=0;j<n;j++){zl[i][j]=h[z];z++;}}}z=0;for(i=0;i<n;i++)for(j=0;j<hang;j++){he[z]=zl[j][i];printf("%c",he[z]);z++;fputc(zl[j][i],miwen);}printf("\n");fclose(mingwen);fclose(miwen);printf("\n\n");printf("密文请查看miwen.txt\n\n\n按enter键返回主菜单\n");ch=getchar();system("cls");caidan();}transpde() //换位解密{FILE *mingwen,*miwen;int i,j,n,m,k,z=0,hang;char ch;char r[1000],h[100],zl[10][10],he[100];if((mingwen=fopen(a,"w+"))==NULL){printf("不能打开文件\n");exit(0);}if((miwen=fopen(b,"w+"))==NULL){printf("不能打开文件\n");exit(0);}printf("请输入密钥\n");scanf("%d",&n);printf("请输入密文\n");ch=getchar();gets(r);k=strlen(r);for(i=0;i<k;i++)fputc(r[i],miwen);fclose(miwen);if((mingwen=fopen(b,"r"))==NULL){printf("不能打开文件\n");exit(0);}space(h,r);m=strlen(h);if(m%n==0){hang=m/n;for(i=0;i<n;i++){for(j=0;j<hang;j++){zl[i][j]=h[z];z++;}}}else{hang=m/n+1;j=0;for(i=m;i<(hang*n);i++){h[i]='a'+j;j++;}for(i=0;i<n;i++){for(j=0;j<hang;j++){zl[i][j]=h[z];z++;}}}z=0;for(i=0;i<hang;i++)for(j=0;j<n;j++){he[z]=zl[j][i];printf("%c",he[z]);z++;fputc(zl[j][i],mingwen);}fclose(mingwen);fclose(miwen);printf("\n\n");printf("明文请查看mingwen.txt\n\n\n按enter键返回主菜单\n");ch=getchar();system("cls");caidan();}caesaren() //凯撒加密{FILE *mingwen,*miwen;char ch;int i;if((mingwen=fopen(a,"w+"))==NULL){printf("不能打开文件\n");exit(0);}if((miwen=fopen(b,"w+"))==NULL){printf("不能打开文件\n");exit(0);}printf("请输入密文\n");ch=getchar();ch=getchar();while(ch!='\n'){fputc(ch,mingwen);ch=getchar();}fclose(mingwen);do{printf("请输入密钥(0~26)\n");scanf("%d",&i);}while(!(i>=0&&i<=26));if((mingwen=fopen(a,"r"))==NULL){printf("不能打开文件\n");exit(0);}ch=fgetc(mingwen);while(ch!=EOF){if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){ch=ch+i;if(ch>'Z'&&ch<='Z'+i||ch>'z')ch=ch-26;}fputc(ch,miwen);printf("%c",ch);ch=fgetc(mingwen);}fclose(mingwen);fclose(miwen);printf("\n\n");printf("密文请查看miwen.txt\n\n\n按enter键返回主菜单\n");ch=getchar();ch=getchar();system("cls");caidan();}caesarde() //凯撒解密{FILE *mingwen,*miwen;char ch;int i;if((mingwen=fopen(a,"w+"))==NULL){printf("不能打开文件\n");exit(0);}if((miwen=fopen(b,"w+"))==NULL){printf("不能打开文件\n");exit(0);}printf("请输入密文\n");ch=getchar();ch=getchar();while(ch!='\n'){fputc(ch,miwen);ch=getchar();}fclose(miwen);do{printf("请输入密钥(0~26)\n");scanf("%d",&i);}while(!(i>=0&&i<=26));if((miwen=fopen(b,"r"))==NULL){printf("不能打开文件\n");exit(0);}ch=fgetc(miwen);while(ch!=EOF){if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){ch=ch-i;if(ch<'a'&&ch>='a'-i||ch<'A')ch=ch+26;}fputc(ch,mingwen);printf("%c",ch);ch=fgetc(miwen);}fclose(mingwen);fclose(miwen);printf("\n\n");printf("明文请查看mingwen.txt\n\n\n按enter键返回主菜单\n");ch=getchar();ch=getchar();system("cls");caidan();}mingwentongji() //统计明文单词个数{FILE *mingwen ;char ch;int i=1;if((mingwen=fopen(a,"r"))==NULL){printf("不能打开文件\n");exit(0);}ch=fgetc(mingwen);while(ch!=EOF){if(ch==' ')i++;ch=fgetc(mingwen);}printf("明文中有%d个单词。