欢迎来到天天文库
浏览记录
ID:12786264
大小:294.50 KB
页数:14页
时间:2018-07-19
《java课程设计——凯撒加密解密程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、JAVA面向对象编程课程设计论文凯撒加密解密程序学生姓名:赵席兵学生学号:200710802050院(系):计算机学院年级专业:07信息与计算科学2010-12-14摘要凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。例如,如果字母的位数是3,明文字母B就变成了密文的E,依次类推,X将变成A,Y变成B,Z变成C,由此可见,位数就是凯撒密码加密和解密的密钥。关键字:凯撒密码加密解密目录第一节4第二节4第三节5参考文献12第一节实例说明凯撒密码是罗马扩张时期朱利斯•凯撒(JuliusC
2、aesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动2位,则字母A将变为C,字母B将变为D,…,字母X变成Z,字母Y则变为A,字母Z变为B。因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文:“Jgnnq”。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位变为“Hello”。这里,移动的位数“2”是加密和解密所用的密钥。第二节编程思路首先获取要加密的内容以及密钥,凯撒密码的密钥即字符移动的位数。由于凯撒密码器的移位是针对字符的,因此需要将待加
3、密的内容中每个字符取出,然后针对每个字符分别加以移位。主要步骤如下:(1)读取要加密的字符串、密钥Strings=args[0];intkey=Integer.parseInt(args[1]);分析:作为示例,程序中通过命令行参数传入要加密的字符串。凯撒密码器的密钥比较简单,只是移动的位数,这里不妨通过命令行参数传入。由于移动的位数为整数,因此使用Integer.parseInt()方法进行了转换。(2)取出字符串中每个字符for(inti=0;i4、方法取出每个字符,分别加以移位。(3)对每个字符进行移位c+=key%26;if(c<'a')c+=26;if(c>'z')c-=26;分析:由于字母表中共26个字符,因此移位前先将移动的位数(key)和26取模。由于Java中字符和整型可自动转换,因此将字符加上一个正整数即代表在字母表中右移多少位。如果移动的位数是负值,则代表在字母表中左移多少位。尽管在移动之前已经将移动的位数和26取了模,但通过这种方式实现右移或左移仍可能发生超界。如字母x右移4位应该是字母b,但将字母x增加4后超出26个字母的范围。因此移位后使用两个if语句判断一下,如果向左超界(c<5、'a')则增加26;向右超界(c>'z')则减去26。此外由于大写字母和小写字母判断是否超界的依据不同,程序中将字符分为大写和小写分别处理。第三节代码与分析源程序:importjava.io.*;publicclassCaesar{publicstaticStringpath;publicstaticStringestr="";publicstaticcharc;publicstaticvoidEncode(Stringstr,intn){for(inti=0;i='a'&&c<6、='z')if(c+n%26<='z')estr+=(char)(c+n%26);elseestr+=(char)('a'+((n-('z'-c)-1)%26));elseif(c>='A'&&c<='Z')if(c+n%26<='Z')estr+=(char)(c+n%26);elseestr+=(char)('A'+((n-('Z'-c)-1)%26));elseif(c>='0'&&c<='9')if(c+n%10<='9')estr+=(char)(c+n%10);elseestr+=(char)('0'+((n-('9'-c)-1)%10));el7、seestr+=c;}}publicstaticvoidDecode(Stringstr,intn){for(inti=0;i='a'&&c<='z')if(c-n%26>='a')estr+=(char)(c-n%26);elseestr+=(char)('z'-(n-(c-'a')-1)%26);elseif(c>='A'&&c<='Z')if(c-n%26>='A')estr+=(char)(c-n%26);elseestr+=(char)('Z'-(n-(c-'A')-18、)%26);elseif(c>='0'&&c<='9
4、方法取出每个字符,分别加以移位。(3)对每个字符进行移位c+=key%26;if(c<'a')c+=26;if(c>'z')c-=26;分析:由于字母表中共26个字符,因此移位前先将移动的位数(key)和26取模。由于Java中字符和整型可自动转换,因此将字符加上一个正整数即代表在字母表中右移多少位。如果移动的位数是负值,则代表在字母表中左移多少位。尽管在移动之前已经将移动的位数和26取了模,但通过这种方式实现右移或左移仍可能发生超界。如字母x右移4位应该是字母b,但将字母x增加4后超出26个字母的范围。因此移位后使用两个if语句判断一下,如果向左超界(c<
5、'a')则增加26;向右超界(c>'z')则减去26。此外由于大写字母和小写字母判断是否超界的依据不同,程序中将字符分为大写和小写分别处理。第三节代码与分析源程序:importjava.io.*;publicclassCaesar{publicstaticStringpath;publicstaticStringestr="";publicstaticcharc;publicstaticvoidEncode(Stringstr,intn){for(inti=0;i='a'&&c<
6、='z')if(c+n%26<='z')estr+=(char)(c+n%26);elseestr+=(char)('a'+((n-('z'-c)-1)%26));elseif(c>='A'&&c<='Z')if(c+n%26<='Z')estr+=(char)(c+n%26);elseestr+=(char)('A'+((n-('Z'-c)-1)%26));elseif(c>='0'&&c<='9')if(c+n%10<='9')estr+=(char)(c+n%10);elseestr+=(char)('0'+((n-('9'-c)-1)%10));el
7、seestr+=c;}}publicstaticvoidDecode(Stringstr,intn){for(inti=0;i='a'&&c<='z')if(c-n%26>='a')estr+=(char)(c-n%26);elseestr+=(char)('z'-(n-(c-'a')-1)%26);elseif(c>='A'&&c<='Z')if(c-n%26>='A')estr+=(char)(c-n%26);elseestr+=(char)('Z'-(n-(c-'A')-1
8、)%26);elseif(c>='0'&&c<='9
此文档下载收益归作者所有