您好,欢迎访问三七文档
1C语言课程设计报告学院专业班级学号姓名课题指导教师_____________报告成绩______________日期:年月日2目录一、课程设计目的.........................................................................................................................3二、课程设计原理.........................................................................................................................3三、设计题目分析.........................................................................................................................33.1题目背景...........................................................................................................................33.2设计要求...........................................................................................................................3四、课程设计内容...........................................................................................................................34.1总体设计...........................................................................................................................34.2详细设计(流程图).......................................................................................................44.3小组分工...........................................................................................................................4五、概要设计.................................................................................................................................55.1主函数设计.......................................................................................................................55.2本人部分...........................................................................................................................6六、程序.........................................................................................................................................76.1源代码...............................................................................................................................76.2算法调试过程中出现的问题及解决方法.....................................................................106.3主要程序运行.................................................................................................................11七、设计心得与总结...................................................................................................................11八、评阅意见.................................................................................................................................113一、课程设计目的维吉尼亚密码是古典密码中非常具有代表的例子。本实验要求用c语言编写和调试一个简单的维吉尼亚密码实现及分析破译程序。通过本实验可以加深理解维吉尼亚密码及其分析破译。二、课程设计原理维吉尼亚使用一个词组作为密钥,密钥中每一个字母用来确定一个代替表,每一个密钥字母被用来加密一个明文字母,等所有密钥字母使用完后,密钥再循环使用。维吉尼亚是最著名的多表代替密码的例子。维基利亚密码加密函数为:f(Pi)=(Pi+Ki)mod26,f(Pi)表示密文字母在字母表中的位置,Pi表示明文字母在字母表中的位置,Ki表示密钥字母在字母表中的位置,i=1,2,……,n。三、设计题目分析3.1题目背景1858年法国密码学家维吉尼亚提出一种以移位替换为基础的周期替换密码。这种密码是多表替换密码的一种。是一系列(两个以上)替换表依次对明文消息的字母进行替换的加密方法。维吉尼亚密码对同一条信息中的不同字母用不同的密码进行加密。比如这样,同样的E在一个位置可能被M所取代,而在另一个位置的E则有可能以K的面目出现。这样,就可以防止任何人利用频率分析法解密该条信息。3.2设计要求(1)设计一个函数实现维吉尼亚密码;(2)在已知明文及其对应密文的基础上,分析破译维吉尼亚密码,编程求解密钥;(3)要求有程序实现,有实验结果截图,有测试例子四、课程设计内容4.1总体设计(1)首先使用维吉尼亚方阵,它的基本方阵是26列26行。方阵的第一行是a到z按正常顺序排列的字母表,第二行是第一行左移循环一位得到得,其他各行依次类推。4(2)加密时,按照密钥字的指示,决定采用哪一个单表。例如密钥字是bupt,加密时,明文的第一个字母用与附加列上字母b相对应的密码表进行加密,明文的第二个字母用与附加列的字母u相对应的密码表进行加密,依次类推。(3)令英文字母a,b,„,z对应于从0到25的整数。设明文是n个字母组成的字符串,即m=m1m2m3m4„mn密钥字周期性地延伸就给出了明文加密所需的工作密钥K=k1k2„kn,E(m)=C=c1c2„cn加密:Ci=mi+kimod26;解密:mi=ci-kimod26,i=1,2,3……,n4.2详细设计(流程图)4.3小组分工于铭阳(组长):解密函数范晓喻:加密函数梁迪:密钥转义函数开始将字符串密钥转义为整型数组输入关键字判断加密解密输入明文加密f(Pi)=(Pi+Ki)mod26输出密文输入密文输出密文解密letter-P_table[key]+96+26*a[n]结束5刘昭阳:加密函数冯冬宿:主函数五、概要设计5.1主函数设计intmain(){charm[100];charc[100];charkey[100];intP_table[7];intmode;printf(请输入模式:\n1:加密\n2:解密\n\n);scanf(%d,&mode);printf(请输入密钥,7位小写字母:\n);scanf(%s,key);if(!str2int(key,P_table,strlen(key))){printf(密钥不合法,程序结束\n);return0;}switch(mode){case(1):{printf(请输入明文:\n);scanf(%s,m);encrypt(m,c,P_table,strlen(m));printf(密文为:%s\n,c);break;}case(2):{printf(请输入密文:\n);scanf(%s,c);decrypt(c,m,P_table,strlen(c));printf(明文为:%s\n,m);break;6}default:printf(请输入正确的模式代码,程序结束\n);}return0;}5.2本人部分我负责内容为密钥转义函数/*****************************函数名:str2int作者:梁迪作用:将字符串秘钥转换为整型数组,排除不合法的密钥,合法时返回1,不合法返回0*****************************/intstr2int(char*key,int*P_table,intlen_k){inti;if(len_k!=7){printf(密钥不合法,请输入7位小写字母合法密钥\n);return0;}for(i=0;ilen_k;i++){if(!islower(key[i])){printf(密钥不合法,请输入7位小写字母合法密钥\n);return0;}P_table[i]=key[i]-96;}return1;}7六、程序6.1源代码#includestdio.h#includectype.h#includestring.h#includestdlib.h/******************************函数名:str2int作者:梁迪作用:将字符串秘钥转换为整型数组,排除不合法的密钥,合法时返回1,不合法返回0******************************/intstr2int(char*key,int*P_table,intlen_k){inti;if(len_k!=7){printf(密钥不合法,请输入7位小写字母合法密钥\n);return0;}for(i=0;ilen_k;i++){if(!islower(key[i])){printf(密钥不合法,请输入7位小写字母合法密钥\n);return0;}P_table[i]=key[i]-96;}return1;}/*****************************函数名:encrypt作者:范晓喻刘昭阳作用:加密函数8*****************************/voidencrypt(char*m,char*c,int*P_table,intlen_m){inti=0;intn=0;intletter;while(n!=len_m){if(!islower(m[n])){c[n]=m[n];n++;continue;}letter=m[n]+P_table[i]-96;if(letter26)letter=letter%26;c[n]=letter+96;n++;i++;if(i==7)i=0;}}/***
本文标题:维吉尼亚密码学报告
链接地址:https://www.777doc.com/doc-2066015 .html