- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
维吉尼亚密码学报告.
C语言课程设计报告
学 院 专 业
班 级 学 号
姓 名 课 题
指导教师 ____ _________报告成绩______________
日 期: 年 月 日
目录
一、 课程设计目的 3
二、 课程设计原理 3
三、 设计题目分析 3
3.1 题目背景 3
3.2 设计要求 3
四、课程设计内容 3
4.1 总体设计 3
4.2 详细设计(流程图) 4
4.3 小组分工 4
五、 概要设计 5
5.1 主函数设计 5
5.2 本人部分 6
六、 程序 7
6.1 源代码 7
6.2 算法调试过程中出现的问题及解决方法 10
6.3 主要程序运行 10
七、 设计心得与总结 11
八、评阅意见 11
课程设计目的
维吉尼亚密码是古典密码中非常具有代表的例子。本实验要求用c语言编写和调试一个简单的维吉尼亚密码实现及分析破译程序。通过本实验可以加深理解维吉尼亚密码及其分析破译。
课程设计原理
维吉尼亚使用一个词组作为密钥,密钥中每一个字母用来确定一个代替表,每一个密钥字母被用来加密一个明文字母,等所有密钥字母使用完后,密钥再循环使用。维吉尼亚是最著名的多表代替密码的例子。维基利亚密码加密函数为:f(Pi)=(Pi+Ki)mod26,f(Pi)表示密文字母在字母表中的位置,Pi表示明文字母在字母表中的位置,Ki表示密钥字母在字母表中的位置,i=1,2,……,n。
设计题目分析
3.1 题目背景
1858年法国密码学家维吉尼亚提出一种以移位替换为基础的周期替换密码。这种密码是多表替换密码的一种。是一系列(两个以上)替换表依次对明文消息的字母进行替换的加密方法。维吉尼亚密码对同一条信息中的不同字母用不同的密码进行。这样,同样的E在一个位置可能被M所取代,而在另一个位置的E则有可能以K的面目出现。这样,就可以防止任何人利用频率分析法解密该条信息。
(2)在已知明文及其对应密文的基础上,分析破译维吉尼亚密码,编程求解密钥;
(3)要求有程序实现,有实验结果截图,有测试例子
四、课程设计内容
4.1 总体设计
(1)首先使用维吉尼亚方阵,它的基本方阵是26列26行。方阵的第一行是a到z按正常顺序排列的字母表,第二行是第一行左移循环一位得到得,其他各行依次类推。
(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……,n
4.2 详细设计(流程图)
4.3 小组分工
于铭阳(组长):解密函数
范晓喻:加密函数
梁迪:密钥转义函数
刘昭阳:加密函数
冯冬宿:主函数
概要设计
5.1 主函数设计
int main()
{
char m[100];
char c[100];
char key[100];
int P_table[7];
int mode;
printf(请输入模式:\n1:加密\n2:解密\n\n);
scanf(%d, mode);
printf(请输入密钥,7位小写字母:\n );
scanf(%s, key);
if (!str2int(key, P_table, strlen(key)))
{
printf(密钥不合法,程序结束 \n);
return 0;
}
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(明文为:%
文档评论(0)