20145305 《Java程序设计》实验一
实验名称
实现凯撒密码,并进行测试。
实验内容
它是一种代换密码。据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。
实验步骤
由于字母表中共26个字符,因此移位前先将移动的位数(key)和26取模。由于Java中字符和整型可自动转换,因此将字符加上一个正整数即代表在字母表中右移多少位。
如果移动的位数是负值,则代表在字母表中左移多少位。尽管在移动之前已经将移动的位数和26取了模,但通过这种方式实现右移或左移仍可能发生超界。
如字母x右移3位应是字母a,但将字母x增加3后超出26个字母的范围。
因此移位后使用两个if语句判断一下,如果向左超界(c<'a')则增加26;向右超界(c>'z')则减去26。
流程图
实验代码
package cryptology;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Kaisa {
StringBuffer eStr = new StringBuffer(""); // 加密字符串
StringBuffer dStr = new StringBuffer(""); // 解密字符串
public static void main(String[] args) {
System.out.print("请输入密钥:");
Scanner s = new Scanner(System.in);
int key = s.nextInt() % 26; // %26的意义是获取密钥的偏移值
Kaisa ks = new Kaisa();
ks.E(key); // 加密
ks.D(key); // 解密
}
/**
* 加密 公式
*/
void E(int k) {
try {
System.out.println("请输入一段明文:");
char b[];
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
String str2 = br2.readLine();
b = str2.toCharArray();
char ch = ' ';
for (int i = 0; i < str2.length(); i++) {
if (b[i] >= 'a' && b[i] <= 'z') {
ch = (char) ((b[i] - 'a' + k) % 26 + 'a');
}
if(b[i] >= 'A' && b[i] <= 'Z'){
ch = (char) ((b[i] - 'A' + k) % 26 + 'A');
}
eStr.append(ch); // 拼接字符串
}
System.out.println("密文为:"+eStr+" 密匙为:" + k);
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
/**
* 解密 公式
*/
void D(int k) {
try {
char b[];
b = eStr.toString().toCharArray();
char ch =' ';
for (int i = 0; i < eStr.length(); i++) {
if (b[i] >= 'a' && b[i] <= 'z') {
ch = (char) ((b[i] - 'a' + 26 - k) % 26 + 'a');
}
if(b[i] >= 'A' && b[i] <= 'Z'){
ch = (char) ((b[i] - 'A' + 26 - k) % 26 + 'A');
}
dStr.append(ch); // 拼接字符串
}
System.out.println("明文:"+dStr);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
运行结果截图
思考感悟
通过本次实验在算法上学会了处理对输入字符串的超界问题,判别和分析
20145305 《Java程序设计》实验一的更多相关文章
- Java程序设计实验 实验五
课程:Java程序设计实验 班级:1353 姓名:符余佳源 学号:20135321 成绩: 指导教师:娄嘉鹏 实验日期:2015. ...
- 南邮JAVA程序设计实验1 综合图形界面程序设计
南邮JAVA程序设计实验1 综合图形界面程序设计 实验目的: 学习和理解JAVA SWING中的容器,部件,布局管理器和部件事件处理方法.通过编写和调试程序,掌握JAVA图形界面程序设计的基本方法. ...
- Java程序设计 实验三
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:李海空 学号:20135329 成绩: 指 ...
- Java程序设计 实验二 Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:李海空 学号:20135329 成绩: 指导教师:娄嘉鹏 ...
- JAVA程序设计 实验一
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:李海空 学号:20135329 成绩: 指导教师:娄嘉鹏 ...
- JAVA程序设计 实验一报告
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1351 姓名:李畅宇 学号:20135129 成绩: 指导教师:娄嘉鹏 ...
- Java程序设计 实验五
实 验 报 告 课程:Java 班级: 1353 姓名:李海空 学号:20135329 成绩: 指导教师:娄嘉鹏 实验日期:2015.6. ...
- java程序设计实验
建立文件调试jdk idea断点调试 项目素数的寻遍
- 《Java程序设计实验》 软件工程18-1,3 OO实验2
- 学号20155311 2016-2017-2 《Java程序设计》第一次实验报告
课程:Java程序设计 实验名称:Java开发环境的熟悉 实验目的与要求: 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 完成实验. ...
随机推荐
- URI、URL和URN
URI.URL和URN URI :Uniform Resource Identifier,通用资源标识符: URL:Uniform Resource Locator,统一资源定位符: URN:Unif ...
- 安装max plugin wizard
参考:http://liweizhaolili.blog.163.com/blog/static/162307442013117731953/
- HtmlEncode、HtmlDecode、UrlEncode、UrlDecode
HtmlEncode: 将 Html 源文件中不允许出现的字符进行编码.例如:"<".">"."&" 等. HtmlDe ...
- Linux -RAID
转自:http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/25/3099464.html 硬盘类型 速度 SATA <150M/s S ...
- Ueditor 标签被过滤
1:将allowDivTransToP设置为false 2:将root.traversal方法中的switch注释
- java file的一些方法
file包下的一些方法: File file = new File("d:\\", "tea.txt"); //文件名 ...
- js页面取值的三种方式
<input id=""<radio <checkbox<div<img对于这些标签内参数取值,一般分为三种类型:一.有关id取值用 #:取id处的v ...
- Hadoop常见错误解决
1. 通过命令和查看日志文件查看hadoop启动和运行情况 在NameNode端,可以通过 tail -100 /var/log/hadoop/hadoop/hadoop-hadoop-namenod ...
- ShopEX 4.8.5.81822 前台Getshell
ShopEX 4.8.5.81822 前台Getshell 作者:unhonker 发布:2014-06-23 00:12 分类:漏洞公布 被撸:8,179次 抢沙发 利用方式 ...
- SDC文件模版
# 1. Define clock create_clock -name "clk_in" -period 20ns [get_ports {clk_in}] # 2. tco c ...