加密解密程序设计
- 格式:docx
- 大小:142.17 KB
- 文档页数:27
des算法程序课程设计一、课程目标知识目标:1. 学生能理解DES算法的基本原理和加密流程;2. 学生能掌握DES算法中置换、替代、循环左移等关键步骤的操作方法;3. 学生能了解DES算法在实际应用中的优缺点及安全性分析。
技能目标:1. 学生能运用编程语言(如Python、C++等)实现DES加密和解密程序;2. 学生能通过实际操作,分析并解决DES算法编程过程中遇到的问题;3. 学生能对DES算法进行优化,提高加解密的效率。
情感态度价值观目标:1. 学生通过学习DES算法,培养对网络安全的认识和责任感;2. 学生在团队协作中,学会沟通、分享和分工合作,提高解决问题的能力;3. 学生在学习过程中,树立正确的信息安全观念,关注我国密码学领域的发展。
课程性质:本课程为信息技术学科,以算法编程为核心,旨在提高学生的实践操作能力和网络安全意识。
学生特点:学生为高中生,具有一定的编程基础和逻辑思维能力,对网络安全感兴趣。
教学要求:结合课本内容,注重理论与实践相结合,鼓励学生动手实践,培养创新意识和团队合作精神。
通过本课程的学习,使学生能够掌握DES算法的基本原理和编程技能,提高网络安全素养。
二、教学内容1. 引入:回顾密码学基本概念,引导学生了解加密技术在网络安全中的应用。
2. 理论知识:- DES算法原理:讲解Feistel网络结构、初始置换、16轮迭代、最终置换等过程;- 密钥生成:阐述子密钥生成过程,包括密钥置换、循环左移、压缩置换等步骤;- 置换和替代:介绍置换表、S盒等在加密过程中的作用。
3. 实践操作:- 编程实现:指导学生运用编程语言(如Python、C++等)实现DES算法的加密和解密功能;- 算法分析:通过实例,分析DES算法的安全性,讨论可能的攻击方法;- 优化改进:引导学生思考如何优化DES算法,提高加解密速度。
4. 教学进度安排:- 第1课时:回顾密码学基本概念,引入DES算法;- 第2课时:讲解DES算法原理,分析加密流程;- 第3课时:学习密钥生成过程,理解置换和替代操作;- 第4课时:编程实现DES算法,分析算法安全性;- 第5课时:优化DES算法,总结课程内容。
网络安全实践编写加密和解密程序在如今的数字化时代,网络安全问题变得越来越重要。
为了确保敏感数据的保密性,密码学技术应用广泛。
编写加密和解密程序是网络安全实践的一个关键方面。
本文将介绍如何编写一个简单的加密和解密程序,以加强数据的保护。
【引言】在互联网时代,信息传输和存储都需注意保密性,目的是防止恶意窃取或非法访问数据。
加密和解密程序通过对数据进行转换,使其只能被授权访问者所理解。
下面我们将分别介绍加密和解密程序的实现过程。
【加密程序】加密是将明文转化为密文的过程。
在编写加密程序时,我们可以选择不同的算法和方法。
这里以简单的凯撒密码为例演示。
步骤一:确定加密算法。
在凯撒密码中,我们将明文中的每个字符按照一定的规则进行替换。
这里我们选择将明文的每个字符按照字母表顺序向后移动三位,即A替换为D,B替换为E,以此类推。
步骤二:编写加密函数。
在程序中,我们可以定义一个加密函数,将明文作为函数的输入,然后根据加密算法对每个字符进行替换。
最后返回加密后的密文。
步骤三:测试加密程序。
编写测试代码,输入明文,调用加密函数进行加密,并输出加密后的密文。
【解密程序】解密是将密文重新转换为明文的过程。
在编写解密程序时,我们需要根据加密算法的规则进行逆向操作。
步骤一:确定解密算法。
对于凯撒密码来说,解密算法就是将密文中的每个字符按照字母表顺序向前移动三位。
步骤二:编写解密函数。
同样地,在程序中,我们可以定义一个解密函数,将密文作为函数的输入,然后根据解密算法对每个字符进行替换。
最后返回解密后的明文。
步骤三:测试解密程序。
编写测试代码,输入密文,调用解密函数进行解密,并输出解密后的明文。
【总结】加密和解密程序是网络安全实践中必不可少的一环。
通过编写这样的程序,我们可以加强数据的保护,确保敏感信息不被未经授权的人访问。
当然,凯撒密码只是密码学中的一种基础算法,实际应用中还需要使用更加复杂、安全性更高的加密算法。
随着网络黑客技术的不断发展,我们需要不断提升自身的网络安全意识,并加强对加密和解密程序的理解和实践,以保护我们的网络安全。
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指定的磁盘文件上。
des密码算法程序c语言一、概述DES(数据加密标准)是一种常用的对称加密算法,它采用64位的密钥,对数据进行加密和解密。
本程序使用C语言实现DES算法,包括密钥生成、数据加密和解密等操作。
二、算法实现1.密钥生成:使用初始置换算法IP(56位)将明文转化为56位的分组,再将该分组经过一系列的逻辑函数F进行6轮处理,最终生成一个56位的密文。
其中密钥包括56位数据位和8位奇偶校验位。
2.数据加密:将需要加密的数据转化为56位的分组,再经过DES 算法处理,得到密文。
3.数据解密:将密文经过DES算法处理,还原成原始明文。
三、程序代码```c#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>//DES算法参数定义#defineITERATIONS6//加密轮数#defineKEY_LENGTH8//密钥长度,单位为字节#defineBLOCK_SIZE8//数据分组长度,单位为字节#definePADDINGPKCS7Padding//填充方式#defineMAX_INPUT_LENGTH(BLOCK_SIZE*2)//数据输入的最大长度//初始置换函数voidinit_permutation(unsignedcharinput[BLOCK_SIZE]){inti;for(i=0;i<BLOCK_SIZE;i++){input[i]=i;}}//逻辑函数F的定义voidlogic_function(unsignedcharinput[BLOCK_SIZE],unsigned charoutput[BLOCK_SIZE]){inti;for(i=0;i<BLOCK_SIZE;i++){output[i]=input[(i+1)%BLOCK_SIZE]^input[i]^(i+1)/BLOCK_SI ZE;}}//DES算法主函数voiddes_encrypt(unsignedchar*input,unsignedchar*output){ unsignedcharkey[KEY_LENGTH];//密钥数组unsignedchariv[BLOCK_SIZE];//初始置换的输入数组unsignedcharciphertext[MAX_INPUT_LENGTH];//密文数组unsignedcharpadding[BLOCK_SIZE];//填充数组unsignedintlength=strlen((char*)input);//数据长度(以字节为单位)unsignedintpadding_length=(length+BLOCK_SIZE-1)%BLOCK_SIZE;//需要填充的字节数unsignedintround=0;//加密轮数计数器unsignedintj=0;//数据指针,用于循环读取数据和填充数据intkey_offset=((1<<(32-KEY_LENGTH))-1)<<(32-(ITERATIONS*BLOCK_SIZE));//密钥索引值,用于生成密钥数组和填充数组的初始值unsignedintk=0;//DES算法中每个轮次的密钥索引值,用于生成每个轮次的密钥数组和填充数组的值unsignedintkplus1=(k+1)%((1<<(32-BLOCK_SIZE))-1);//DES算法中每个轮次的密钥索引值加一后的值,用于下一个轮次的密钥生成charseed[32];//使用MD5作为初始种子值生成随机数序列chartmp[MAX_INPUT_LENGTH];//临时变量数组,用于数据交换和中间计算结果存储等操作time_tt;//时间戳变量,用于生成随机数序列的种子值srand((unsignedint)time(&t));//设置随机数种子值,确保每次运行生成的随机数序列不同init_permutation(iv);//初始置换操作,将输入数据转化为56位分组(需要重复填充时)或一个随机的分组(不需要重复填充时)memcpy(key,key_offset,sizeof(key));//将初始化的密钥数组复制到相应的位置上,以便于接下来的轮次生成不同的密钥值memcpy(padding,seed,sizeof(seed));//将种子值复制到填充数组中,以便于接下来的轮次生成不同的随机数序列值for(round=0;round<ITERATIONS;round++){//进行加密轮次操作,每轮包括。
目录一、程序设计目的 (2)二、课程设计要求 (2)三、设计题目分析 (2)3.1题目简介 (2)3.2设计要求 (3)四、课程设计内容 (3)4.1总体设计 (3)4.2详细设计 (7)4.3 调试与测试 (12)五、设计心得及总结 (12)六、评阅意见 (14)参考书目 (15)题目:文件移位加密与解密一、程序设计目的:随着现代化校园的发展,人们的文本文件需要更简便、安全和可靠的加密管理模式。
设计一个基于c语言的文本文件加密及解密软件,可以方便对文本文件的加密与解密。
本设计实现了文本文件的解密及解密,运行软件之后只需输入任意一个文本文件的文件名及后缀名即可对该文本文件进行加密或解密操作。
本设计的加密与解密系统,使用了面向各类文件的方法,运用Microsoft Visual C++ 6.0实现具有加密、解密、帮助信息、读取文本文件、显示结果、退出等功能的文件加密与解密系统。
本课程设计是重要的实践性环节之一,是在学生学习完《高级程序设计语言(C)》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、课程设计要求:1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用4. 设计完成后提交课程设计报告三、设计题目分析:3.1题目简介:将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对应字符进行移位操作即可,解密时移动相反。
例如:加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后移动5位(注:z后接a)可得到密文(乱码)fghijkl;对该文件解密:文件内容为fghijk1,密钥为5,则有fghijk1每个字母向前移动5位(注a后接z),可得到原文abcdef。
c语言解密代码下面是一个简单的`C`语言加密解密代码,实现了凯撒加密的功能:```c#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);}elseif (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);}}// 输出加密后的字符串printf("\nAfter encode: \n");puts(str);}// 实现解密功能,将字母顺序前移 n 位void decode(char str[], int n){int i;for (i = 0; i < strlen(str); ++i){c = str[i];if (c >='a' && c <='z'){// 解密后还为小写字母,直接解密if (c - n % 26 >='a'){str[i] = (char)(c - n % 26);}else{// 解密后不为小写字母了,通过循环小写字母处理为小写字母 str[i] = (char)(c - n % 26 + 26);}}elseif (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[20];int n;printf("请输入字符串(以空格结束输入):\n");gets(str);printf("请输入密钥(1-25的整数):\n");scanf("%d", &n);printf("加密前的字符串为:%s\n", str);encode(str, n);printf("加密后的字符串为:%s\n", str);decode(str, n);printf("解密后的字符串为:%s\n", str);return 0;}```在上述代码中,加密函数`encode()`通过将字符串中的每个字符循环向后移动`n`位实现加密,解密函数`decode()`通过将字符串中的每个字符循环向前移动`n`位实现解密。
ExcelVBA编程与数据加密如何利用VBA进行数据的加密和解密ExcelVBA编程与数据加密数据安全一直是各行各业都非常关注的一个议题,保护数据的隐私和保密性对于企业和个人都至关重要。
在Excel中,我们可以利用VBA编程的功能来进行数据的加密和解密,提高数据的安全性。
本文将介绍如何利用ExcelVBA编程来进行数据的加密和解密。
一、VBA加密数据在Excel中,我们可以使用VBA编程来对敏感数据进行加密,使其在未授权的情况下无法被读取或解密。
下面是一个示例代码,用于演示如何使用VBA加密数据:```vbaSub EncryptData()Dim dataRange As RangeDim cell As RangeDim encryptedValue As String' 选择需要加密的数据范围Set dataRange = Range("A1:A10")' 循环遍历每个单元格并加密数值For Each cell In dataRangeencryptedValue = Encrypt(cell.Value) ' 调用加密函数cell.Value = encryptedValue ' 将加密后的数值写入单元格Next cellEnd SubFunction Encrypt(data As String) As String' 自定义加密算法,此处仅为示例Dim encryptedData As StringDim i As Integer' 将字符串每个字符的ASCII码加1For i = 1 To Len(data)encryptedData = encryptedData & Chr(Asc(Mid(data, i, 1)) + 1)Next iEncrypt = encryptedDataEnd Function```在上述示例代码中,我们首先选择需要加密的数据范围,然后使用循环遍历每个单元格并调用加密函数进行加密操作。
文件加密与解密程序在当今数字化的时代,我们每天都会产生和处理大量的文件,其中包含着各种各样的重要信息,如个人隐私、商业机密、金融数据等等。
为了保护这些敏感信息不被未经授权的访问和窃取,文件加密与解密程序应运而生。
文件加密,简单来说,就是将原本可以直接读取和理解的文件内容通过特定的算法进行转换,使其变成一种无法直接理解的形式。
只有通过正确的解密程序和密钥,才能将加密后的文件恢复为原始的可读状态。
加密的方式多种多样,常见的有对称加密和非对称加密两种。
对称加密就像是一把只有一个钥匙的锁,加密和解密都使用同一个密钥。
这种方式的优点是加密和解密速度快,但缺点是密钥的管理和分发比较困难,如果密钥泄露,那么加密就失去了意义。
非对称加密则使用一对密钥,一个是公钥,一个是私钥。
公钥可以公开,用于加密文件,而私钥则只有持有者知道,用于解密文件。
这种方式的安全性相对较高,但加密和解密的速度较慢。
在实际应用中,选择哪种加密方式取决于具体的需求和场景。
比如,如果是在一个相对封闭的系统中,对称加密可能就足够了。
但如果是在互联网上进行文件传输,非对称加密则更加合适。
那么,文件加密程序是如何工作的呢?以常见的 AES(高级加密标准)对称加密算法为例,它首先会将文件分成固定大小的块,然后对每个块进行一系列复杂的数学运算,包括替换、置换、混合等操作,最终将文件转换为加密后的形式。
在这个过程中,密钥起到了关键的作用,它决定了运算的方式和结果。
而解密程序则是加密程序的逆过程。
它使用相同的密钥,按照相反的步骤对加密后的文件进行运算,从而恢复出原始文件。
为了确保加密和解密的效果和安全性,加密算法的选择至关重要。
一个好的加密算法应该具有高度的复杂性和随机性,使得攻击者难以通过分析加密后的文件来推断出密钥和原始文件的内容。
同时,密钥的生成和管理也需要严格的安全措施。
密钥应该足够长且随机,并且要妥善保存,防止被窃取或泄露。
除了算法和密钥,加密与解密程序的实现还需要考虑到用户的使用体验。
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,则:当验证码正确时,屏幕显示:得到的原文如加密时的原文。
课程设计题目加密解密程序设计学院自动化学院专业电气工程及其自动化班级姓名指导教师年月9 日课程设计任务书学生姓名:专业班级:指导教师:工作单位:自动化学院题目:加密解密程序设计初始条件:掌握8086汇编语言程序设计方法,设计一个电子时钟,实现分、秒、时的显示与刷新功能。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1. 定义显示界面。
2. 调用系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入内存区。
3. 将存在系统内存区的时间数用数字式或指针式钟表的形式显示出来。
4. 获取键盘的按键值,判断键值并退出系统。
5. 撰写课程设计说明书。
内容包括:摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:12月26日-----12月28日查阅资料及方案设计12月29日----- 1月 2 日编程1月3日----- 1月7日调试程序1月8日----- 1月9日撰写课程设计报告指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (1)1设计任务及要求 (2)1.1 加密解密设计的意义 (2)1.2 程序设计任务 (2)2 加密方法及方案比较 (3)2.1 加密方法 (3)2.2 加密方案及比较 (3)3 加密解密设计流程及描述 (5)3.1程序所需模块 (5)3.2程序运行界面 (5)3.3响铃程序 (6)3.4功能选择程序 (6)3.5数据循环输入子程序 (7)3.6加密过程程序 (8)3.7解密过程程序 (9)3.8退出程序 (10)3.9总体程序流程图 (11)4 程序调试说明和结果分析 (12)4.1 程序调试 (12)4.2 程序运行结果 (12)5 心得体会 (15)参考文献 (16)附录:设计原程序 (17)本科生课程设计成绩评定摘要本次课程设计是需要通过掌握的8086汇编语言程序设计方法,设计出一个用于加密和解密的软件程序。
程序运行后,首先显示‘Please Input Data:‟,并响铃一声,然后从键盘接受以字母开始的201个字节型数据,若首字母为‘E’,则将后续的200个数据进行加密后,显示在屏幕上;若首字母为‘R’,则将后续的200个数据解密,并显示在屏幕上。
数据加密和解密功能的实现是利用对数据的ASCII码进行加减运算,使它改写为另一组数据,隐藏了原数据,使他人不能看到,从而保证了原数据的安全。
关键字:加密;解密;保证安全1设计任务及要求1.1加密解密设计的意义当今的社会已经进入一个充满竞争的时代,同时也是一个信息知识化和知识产权化的时代,信息的取得方式来源和取得信息的多少都很大程度上成为了我们能否更顺利更优秀得完成工作而在激烈的竞争中取得胜利的关键所在,所以势必有很多私人的信息需要实行安全措施,并进行必要的保密工作,这就要用到加密程序,而当我们需要用到这些信息,并从加密系统中提取出来时,就要用到解密程序,也就是我们将要设计的加密和解密环节。
加密解密系统是目前运用最广泛和最重要的应用系统之一。
在工作中,我们需要通过加密解密技术对工作中出现的对所在单位非常重要且需要十分保密的资料或文件进行加密,以确保自身的利益不被侵害;在生活中,密码箱也很有用处,而其原理正式加密解密环节;在军事上,为了更好的保护自己,保留更多的军事科学技术为我方所用,并且不让对手过于了解我方攻防战略战术和武器装备,需要对相关资料进行设置安全保护。
可以看到,当今社会的方方面面已经越来越需要使用到加密和解密的装置来帮助我们更好的管理自己的生活,处理自己的工作,国家更是需要有安全保障才能越发强大,因此,加密解密系统的优良是完成生产生活的重要任务之一。
1.2程序设计任务程序运行后,首先显示…Please Input Data:‟,并响铃一声,然后从键盘接受以字母开始的101个字节型数据,如果首字母为…E‟,则将后续的200个数据进行加密后,显示在屏幕上;如果首字母为…R‟,则将后续的200个数据解密,并显示在屏幕上。
撰写课程设计说明书。
内容包括:摘要、目录、正文、参考文献、附录。
正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计心得体会。
2 加密方法及方案比较2.1 加密方法加密系统需要涉及到明码(clear code)和暗码(dim code)之间的转换,明码就是当我们准备进行加密操作时被加密的字符数据,一般由键盘等输入设备输入给计算机;暗码则是明码被加密后变成的数据,明码和暗码是通过算法(algorithm)来进行转换的,而转化过程就是加密和解密的过程,很明显,加密和解密的算法是一一对应的,是一对反运算,在加密解密中叫做“对称算法”(symmetrical algorithm),加密解密环节的安全系数也主要取决于设计的算法,主要是防范用穷举法,debug法等破译方法。
所以选择合适的算法是建立成熟可靠,安全性好的加密解密环节的关键所在。
常用数据加密算法有:数据加密算法有很多种,按照发展进程来分,经历了古典密码、对称密钥密码和公开密钥密码阶段,古典密码算法有替代加密、置换加密;对称加密算法包括DES和人AES;非对称加密算法包括RSA、背包密码、McEliece密码、Rabin、椭圆曲线、EIigamal D-H等。
目前在数据通信中使用最普遍的算法有DESDESDESDES算法、及RSARSARSARSA算法和PGP算法等。
2.2 加密方案及比较方案一:对需要加密的数据进行分类,数字则减1加密,字母则加3加密,得到加密后的数据,解密只需对数字加1,字母减3,并通过DOS调用将所得结果显示在屏幕上。
方案二:加密时将输入的字符乘以二再和0FFH取异或;解密是将输入的字符除以二再和0FFH取异或。
并通过DOS调用将所得结果显示在屏幕上。
比较:对数据进行异或加密容易超出字母和数字表示范围,产生特殊符号和图案,不易控制,这次设计主要针对普通数字和字母的加密,因此方案一比较适合。
本次设计主要针对输入的数字和字母进行加减加密,采用的方法为输入数据后,若第一个数据为E则把E后面的数字减1字母加3做为加密后的数据,若要对一组数据解密,则输入R并在其后输入想要解密的数据,程序运行后便会还原数据,得到解密后的数据。
加密过程中会由于加密后数据超出数字或字符可以表示的范围,数子9加1后超出范围,因此可以用9减去9,得0来表示数字9加密后的数据;字母X/x,Y/y,Z/z加3后也会超出字母表示范围,因此可以减去26,得A/a,B/b,C/c,分别作为其加密后的数据。
3 加密解密设计流程及描述3.1程序所需模块根据程序设计要求,可写出该程序所需各主要的功能模块:字符循环输入模块、字符串输出模块、响铃模块、功能选择模块、加密模块、解密模块、程序退出模块。
程序功能模块流程图如图3-1所示。
图3-1程序功能模块流程图3.2程序运行界面字符串显示子程序流程图如图3-2所示。
图3-2字符串显示子程序流程图好看的运行界面可以给用户一种赏心悦目的感觉,本次设计主要利用汇编语言编写程序并在DOS环境下运行,因此可以使用DATA SEGMENT指令定义数据段显示自己设计的界面。
可以加入自己设计的图案或字符串,采用9号功能调用,输出多字符串,因此其结尾必须以…$‟结尾,自定义界面程序代码格式如下:DATA SEGMENTHEADMSG DB 0DH,0AH…‟,'$'字符串显示过程子程序程序代码如下:DISP PROC NEAR ;显示字符串子程序MOV AH,9INT 21HRETDISP ENDP3.3响铃程序根据设计要求,程序运行后,首先显示…Please Input Data:‟,并响铃一声,响铃程序可以利用2号功能调用,07H为响铃的ASCII码,响铃程序代码如下:MOV DL,07H ;设置响铃声MOV AH,2INT 21H ;输出响铃声3.4功能选择程序用比较指令CMP选择所需程序实现的功能,如果输入的字符串首字符为E则进入加密子程序;如果输入的字符串中首字符为R则进入解密子程序;如果输入的字符串中首字符为Q或q则进入退出子程序。
如果输入的字符中首字符非前三种情况则会提醒你再次输入,直到输入的首字符为前面三种情况中的一种为止。
功能选择程序流程图如图3-3所示。
图3-3功能选择程序流程图3.5数据循环输入子程序采用1号DOS功能调用命令,循环输入单个字符并保存数据,加密解密均是以单个字符为单位进行,这样就不会由于一个字符加密后产生的进位影响到其他字符,造成加密解密结果失真。
采用的是FOR循环语句,并在输入最后一个字符后,加…$‟字符结束输入,直至键入回车符终止子程序返回主程序,因此还要用到比较指令CMP或TEST指令。
循环输入程序流程图如图3-4所示。
图3.4循环输入程序流程图3.6加密过程程序主要针对输入的数字和字母进行加密,采用的方法为,输入数据后,若第一个数据为E,则把E后面的数字减1字母加3作为加密后的数据。
对于数字0减1后小于0,需直接加上9,变成9,对于X/x,Y/y,Z/z加3后会超出字母范围因此需减去26,变为A /a,B/b,C/c。
程序中判断语句应用CMP或者TEST指令以免产生运算结果,破坏数据。
由于是一位一位的进行数据加密,因此需要时刻判断当前字符是否为…$‟,因为字符串是以…$‟结尾的。
加密过程的关键在于,判断字符类型及加密后如何对数据进行保存并保护,该过程中对子程序的调用应用非常多,可见子程序的重要作用。
加密过程程序流程图如图3-5所示。
图3.5加密过程程序流程图3.7解密过程程序解密为加密的逆过程,即输入数据后,若第一个数据为R,则把R后面的数字加1字母减3作为解密后的数据。
由于数字9加1后大于9,需直接减9变为0,对于A/a,B/b,C/c减3后会超出字母范围因此需减去3再加26变成X/x,Y/y,Z/z,。
因此当输入数据9以后,应直接将其减9变为0,当输入A/a,B/b,C/c时,应先减去3再加上26,变成X/x,Y/y,Z/z。
和加密过程类似,也许判断输入字符是否为…$‟,以决定是否完成输入进行解密过程。
不同类型所以加密算法不同,因此解密的关键就是运用对应加密算法的逆运算进行解密,可见对字符类型的判断很重要。
解密过程程序流程图如图3-6所示。
图3-6解密过程程序流程图3.8退出程序当第一个输入数据为字母Q/q时,开始运行退出程序,提示“DO YOU WANT TO EXIT THIS PROGRAM?(Y/N):”输入Y则退出程序,输入N则提示:“PLEASE INPUT DATA:”。