《Vigenere文件加密系统java实现网络安全课程设计说明书》由会员分享,可在线阅读,更多相关《Vigenere文件加密系统java实现网络安全课程设计说明书(17页珍藏版)》请在金锄头文库上搜索。
1、 Vigenere密码文件加密系统java实现数学与计算机学院课程设计说明书课 程 名 称: 网络安全课程设计 课 程 代 码: 题 目: Vigenere文件加密系统 年级/专业/班: 学 生 姓 名: 学 号: 开 始 时 间: 2013 年 12 月 16 日完 成 时 间: 2013 年 12 月 31 日课程设计成绩:学习态度及平时成绩(20)技术水平与实际能力(20)完成情况(20)创新(5) 说明书(计算书、图纸、分析报告)撰写质量(35)总 分(100)指导教师签名: 年 月 日目 录 1 需求分析21.1任务与分析21.2测试数据22 概要设计32.1主要变量及方法32.2
2、UML图及流程图33 概要设计43.1主函数的实现43.2数据录入实现44 调试分析55 用户使用说明56 测试结果57 附录10 Vigenere密码文件加密系统java实现摘 要Vigenere算法实际上是自动密钥加密法的一个简化形式。Vigenere加密法是基于关键词的加密系统。选取一个关键词,写在明文的上面,并不断重复书写,这样每个明文字母都与一个关键词的字母关联。每个明文字母与关键词的一个字母配对,从一个给定的26*26的字母矩阵中找到密文。以下将用JAVA来实现这一加密算法。关键词:Vigenere算法;加密;JAVA 引 言 本次课程设计的主要内容是用JAVA实现Vigenere
3、加密算法,随着现代通信技术的发展以及计算机网络的普及,信息已成为社会必须的资源,信息安全也成为时代的迫切需求。加密技术作为信息安全的核心也越来越受到人们的普遍重视。Vigenere加密算法可以实现一个简单的文件加密。1 需求分析 古典密码系统已经初步体现出近代密码系统的雏形,加密方法逐渐复杂,其变化较小。虽然从近代密码学的观点来看,许多古典密码是不安全的,即是极易破译的,但我们不应当忘掉古典密码在历史上发挥的巨大作用。单表代换密码,指一旦密钥被选定,则每个明文字母对应的数字都被加密变换成对应的惟一数字,即对每个明文字母都用一个固定的明文字母表到密文字母表的确定映射。这种简单的一一对应关系,很容
4、易被破译者用频率分析法进行破解。针对这种缺陷,人们提出多表代换密码,用一系列(两个以上)代换表依次对明文消息的字母进行代换。古典加密算法中很多算法的保密性是基于算法本身保密的,这一点与现代加密算法不同。正是由于算法本身保密,所以并不利于密码学的发展,密码学在古典密码学阶段发展是非常缓慢的。古典密码大都比较简单,这些加密方法是根据字母的统计特性和语言学知识加密的,在可用计算机进行密码分析的今天,很容易被破译。虽然现在很少采用,但研究这些密码算法的原理,对于理解、构造和分析现代密码是十分有益的。古典密码在整个密码体系中起着基础的作用,因此理解并熟练运用是进入这一学科的关键,也有助于进一步学习近代密
5、码学。1.1任务与分析 本课题的主要的目的是利用Vigenere密码算法通过文件读入明文和密钥,保存在一维数组中,然后计算出密文,通过流保存在文件中。1.2测试数据 明文p:datasecurity;密钥k:best2 概要设计 2.1主要变量及方法public class TestV类:输入密钥,控制加密、解密、退出等操作。class Operate类:封装加密、解密操作2.2 UML图及流程图TestVString:scString:snjiaMi():StringjieMi():StingOperateString:cjiaMi():StringjieMi():Sting图1UML图开始
6、 输入关键字输入明文得到密文并将其输出得到解密过程中关键字输出解密后明文结束 图2 流程图3 概要设计 3.1主函数的实现puluc 类实现public class TestVpublic static void main(String args) throws ExceptionOperate o = new Operate();BufferedReader br=new BufferedReader(new InputStreamReader(System.in);System.out.print(请输入密钥:);sc=br.readLine();System.out.print(加密请输
7、入操作代码1,解密请输入操作代码2,退出输入3:);sn=br.readLine();int key = Integer.parseInt(sn);switch(key)3.2数据录入实现operate 类实现class Operate public String jiaMi(String sc) throws Exception / 加密方法for (String a : vexpressly) / 将输入的明文与密文从数组类型转换成String类型for (String b : vkey) for (int i = 0; i a.length(); i+) int j = i % (b.l
8、ength();char s = (char) (int) a.charAt(i) + b.charAt(j) - 194) % 26 + 97); / 对应的密文v = v + s; / 把生成的密文字符逐个加到v上public void jieMi(String sc) throws Exception / 解密方法for (String a : ciphertext) for (String b : vkey) for (int i = 0; i a.length(); i+) int j = i % (b.length();char s = (char) (int) a.charAt(
9、i) + 26) - b.charAt(j) % 26 + 97); / 解密的过程4 调试分析1.算法思想 由Vignere算法的实现方法可以分析出实现Vignere算法的思想,可以把A到Z的字符看作是一个环形字符数组,而加密过程就是在密钥的基础上移动明文索引个字符从而得到密文。2.对算法思想的实现char s = (char) (int) a.charAt(i) + b.charAt(j) - 194) % 26 + 97); / 对应的密文用以上代码可以利用ASCII编码对字符数组进行处理,解密过程则相反。char s = (char) (int) a.charAt(i) + 26) -
10、 b.charAt(j) % 26 + 97);5 用户使用说明 明文存放在d:jiamiweijian.txt的文件中,用户使用时将要加密的字符串复制到d:jiamiweijian.txt的文件中,运行时在命令窗口中按提示选择相应的操作以及输入密钥,然后运行程序,密文将会存放在d:jiemiweijian.txt中。6 测试结果 1.加密测试明文:datasecurity 密钥:best 明文文件: 图3明文运行加密:图4加密命令得到密文:图5密文密文:taeiyczjap 密钥:iscbupt解密测试:图6解密命令得到明文为:图7解密后的明文结 论Vigenere算法的加密矩阵思想我觉得非
11、常有意思,现代的Des等加密思想,我觉得与之有相通之处。在实验的过程中,我体会到数学知识对密码学的巨大作用。作为一名学生,我觉得仅仅满足于对密码算法的破解是不够的,我们应该在研究一种算法时吸收它的思想,掌握更多的数学知识,从而可以研究得更加深入。致 谢本论文是在李曦老师的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成, 他都始终给予我细心的指导和不懈的支持。两年多来,不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向各位老师致以诚挚的谢意和崇高的敬意。在此,我还要感谢我的同学们,正
12、是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。特别感谢我的专业课老师,她对本课题做了不少工作,给予我不少的帮助。7 附录 完整代码:import java.io.*;import java.util.*;public class TestVpublic static void main(String args) throws ExceptionString sc=null;String sn = null;tryOperate o = new Operate();BufferedReader br=new BufferedReader(new InputStreamReader(System.in);System.out.print(请输入密钥:);sc=br.readLine();System.out.print(加密请输入操作代码1,解密请输入操作代码2,退出输入3:);sn=br.readLine();int key = Integer.parseInt(sn);switch(key)case 1:o.jiaMi(sc);break;case 2:o.jieMi(sc);break;case 3:System.exit(0); default:System.out.println(