java课程设计——凯撒加密解密程序(精品)

上传人:无*** 文档编号:174408429 上传时间:2022-12-15 格式:DOC 页数:14 大小:294.50KB
收藏 版权申诉 举报 下载
java课程设计——凯撒加密解密程序(精品)_第1页
第1页 / 共14页
java课程设计——凯撒加密解密程序(精品)_第2页
第2页 / 共14页
java课程设计——凯撒加密解密程序(精品)_第3页
第3页 / 共14页
资源描述:

《java课程设计——凯撒加密解密程序(精品)》由会员分享,可在线阅读,更多相关《java课程设计——凯撒加密解密程序(精品)(14页珍藏版)》请在装配图网上搜索。

1、JAVA面向对象编程课程设计论文凯撒加密解密程序学生姓名: 赵 席 兵 学生学号: 200710802050 院(系): 计算机学院 年级专业: 07信息与计算科学 2010-12-14摘要凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。例如,如果字母的位数是3,明文字母B就变成了密文的E,依次类推,X将变成A,Y变成B,Z变成C,由此可见,位数就是凯撒密码加密和解密的密钥。关键字: 凯撒密码 加密 解密目录第一节4第二节4第三节5参考文献12第一节 实例说明凯撒密码是罗马扩张时期朱利斯凯撒(Julius Caesa

2、r)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动2位,则字母A将变为C,字母B将变为D,字母X变成Z,字母Y则变为A,字母Z变为B。因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文:“Jgnnq”。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位变为“Hello”。这里,移动的位数“2”是加密和解密所用的密钥。第二节 编程思路首先获取要加密的内容以及密钥,凯撒密码的密钥即字符移动的位数。由于凯撒密码器的移位是针对字符的,因此需要将待加密的内容中每个字符取出,然后针对每个字符分别加

3、以移位。主要步骤如下:(1) 读取要加密的字符串、密钥String s=args0;int key=Integer.parseInt(args1);分析:作为示例,程序中通过命令行参数传入要加密的字符串。凯撒密码器的密钥比较简单,只是移动的位数,这里不妨通过命令行参数传入。由于移动的位数为整数,因此使用Integer.parseInt( )方法进行了转换。(2) 取出字符串中每个字符for(int i=0;is.length( );i+)char c=s.charAt(i);分析:这里使用字符串类的 charAt()方法取出每个字符,分别加以移位。(3) 对每个字符进行移位c+=key%26;

4、 if(cz) c-=26; 分析:由于字母表中共26个字符,因此移位前先将移动的位数(key)和26取模。由于Java中字符和整型可自动转换,因此将字符加上一个正整数即代表在字母表中右移多少位。如果移动的位数是负值,则代表在字母表中左移多少位。尽管在移动之前已经将移动的位数和26取了模,但通过这种方式实现右移或左移仍可能发生超界。如字母x右移4位应该是字母b,但将字母x增加4后超出26个字母的范围。因此移位后使用两个if语句判断一下,如果向左超界(cz)则减去26。此外由于大写字母和小写字母判断是否超界的依据不同,程序中将字符分为大写和小写分别处理。第三节 代码与分析源程序:import j

5、ava.io.*;public class Caesarpublic static String path;public static String estr=;public static char c;public static void Encode(String str,int n)for(int i=0;i=a&c=z) if(c+n%26=A&c=Z) if(c+n%26=0&c=9) if(c+n%10=9) estr+=(char)(c+n%10); else estr+=(char)(0+(n-(9-c)-1)%10); else estr+=c;public static v

6、oid Decode(String str,int n) for (int i = 0; i = a&c=a) estr+=(char)(c-n%26); else estr+=(char)(z-(n-(c-a)-1)%26); else if(c=A&c=A) estr+=(char)(c-n%26); else estr+=(char)(Z-(n-(c-A)-1)%26); else if(c=0&c=0) estr+=(char)(c-n%10); else estr+=(char)(9-(n-(c-0)-1)%10); else estr+=c; public static void

7、main(String args) String array = ; int num; System.out.println(凯撒密码); System.out.println(仅支持英文和阿拉伯数字-zhaoxibing); try System.out.println(1、加密); System.out.println(2、解密); System.out.println(3、暴力破解); System.out.print(请选择:); BufferedReader input_ed = new BufferedReader(new InputStreamReader(System.in);

8、 String ed=input_ed.readLine(); if(ed.equals(1)|ed.equals(2)|ed.equals(3) System.out.print(文件路径(*.txt):); BufferedReader input_path = new BufferedReader(new InputStreamReader(System.in); path=input_path.readLine(); File file = new File(path); FileInputStream rdf = new FileInputStream(file); byte s =

9、 new byterdf.available(); int b = rdf.available(); while(b=rdf.read(s, 0, b)!=-1) String content = new String(s,0,b); array = array+content; rdf.close(); if(ed.equals(3) for(int k=1;k=10) for(int j=1;j=9;j+)Decode(array,k+26*j);System.out.println(密钥为+(k+26*j)+时,结果为+estr);estr=; System.out.print(正确的密

10、钥为(整数):); BufferedReader input_result = new BufferedReader(new InputStreamReader(System.in); int result=Integer.valueOf(input_result.readLine().intValue(); Decode(array,result); else System.out.print(密钥(整数):); BufferedReader input_num = new BufferedReader(new InputStreamReader(System.in); num=Intege

11、r.valueOf(input_num.readLine().intValue(); if(ed.equals(1) Encode(array,num); else Decode(array,num); File f=new File(path); FileWriter outFile=new FileWriter(f); BufferedWriter bufferOut=new BufferedWriter(outFile); bufferOut.write(estr); bufferOut.newLine(); bufferOut.flush(); bufferOut.close(); S

12、ystem.out.print(请查看原文件是否已成功加密或者解密。); else System.out.print(您输入有误。); catch(Exception e)System.out.print(输入错误。); 该程序既可用于加密又可用于解密,还可以对密文暴力破解。即只要运行1加密程序,输入:Caesar 明文(要加密的字符串)路径,密钥(移动的位数)即可加密。在密钥前面加上负号,将运行Caesar 明文(要加密的字符串)路径 -密钥(反向移动的位数)即可解密。运行2解密程序,输入:Caesar 明文(要加密的字符串)路径,密钥(移动的位数),也可解密。如为了加密字符串“I love

13、 you more than I can say!”,该字符串位于D:jiami.txt中。可随意取一个密钥如5,运行:1(即加密程序) D:jiami.txt 5即原文档字符串将变为“N qtaj dtz rtwj ymfs N hfs xfd!”。这里“I love you more than I can say!”是明文,“N qtaj dtz rtwj ymfs N hfs xfd!”是密文。如果密钥大于26,程序中移位前会和26取模而将其调整到26以下。因此运行:1(即加密程序) D:jiami.txt 31同样将输出“N qtaj dtz rtwj ymfs N hfs xfd!”

14、。为了将密文“N qtaj dtz rtwj ymfs N hfs xfd!”解密,需要知道加密该密文所用的密钥5,这样,执行:1(即加密程序) D:jiami.txt -5将得到明文“I love you more than I can say!”。如果密钥和加密时所用的不同,则解密时将得到无意义的输出,如运行1(即加密程序) D:jiami.txt -4即原文档将变为“E hkra ukq ikna pdwj E ywj owu!”。这样,只有知道密钥才能得到原来的密文。解密一般运行2程序解密,2(即解密程序) D:jiami.txt 5即就会将原来加密后的“N qtaj dtz rtwj

15、 ymfs N hfs xfd!”字符串解密成“I love you more than I can say!” ,即原来的明文。如果不知道原文的密钥,可运行3暴力破解。如知道密文为“N qtaj dtz rtwj ymfs N hfs xfd!”运行3(暴力破解) D:jiami.txt得到如下界面即最简单的密钥为5。将密文“N qtaj dtz rtwj ymfs N hfs xfd!”转换为“I love you more than I can say!”参考文献:1 嘉兴高专 计算机时代 1997年11期 2 高炯 英文参考文献著录若干问题讨论J 辽宁行政学院院报 200810(5)3 王锡林,郭庆平,程胜利 计算机安全 人民邮电邮版社4 杨义先,林晓东,刑育森 信息安全综论 北京邮电大学5 章照止,杨义先,马晓敏 信息理论密码学的新进展及研究问题 电子学报

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!