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

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语言课程设计数据的加密与解密《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语言加密与解密的基本概念和方法,理解加密与解密的技术原理,能够运用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语言程序,使学生掌握加密和解密的编程技巧,提高学生的实际操作能力和创新思维。
(完整word版)电子系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语言课程设计-文件加密解密

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语言中,我们可以利用各种加密算法实现数据加密和解密操作,确保数据在传输和存储过程中的安全性。
在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语言中,我们可以使用文件操作和加密算法来实现文件加密。
首先,我们需要使用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语⾔实现加密解密功能加密主要是通过⼀种算法对原内容进⾏处理,使原来内容不直观可见。
解密过程通常要知道加密的算法,然后对加密后的内容进⾏逆处理,从⽽实现解密功能。
当然解密也有⼀些暴⼒破解的⽅法。
接下来以 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;}测试运⾏如下:成功实现加密解密功能,读者可以稍加改造完成对⽂件的加密解密以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程设计名称: 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个单词。