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编辑器> 课程: 完成实验. ...
随机推荐
- Exploring the Angular 1.5 .component() method
Angular 1.5 introduced the .component() helper method, which is much simpler than the.directive() de ...
- Hadoop数据传输工具:Sqoop
Apache Sqoop(SQL-to-Hadoop) 项目旨在协助 RDBMS 与 Hadoop 之间进行高效的大数据交流.用户可以在 Sqoop 的帮助下,轻松地把关系型数据库的数据导入到 Had ...
- ASP.NET MVC 页面调整并传递参数
转自:http://blog.csdn.net/zhensoft163/article/details/7174661 使用过ASP.NET MVC的人都知道在MVC中页面后台中常用的页面跳转方法有几 ...
- HDP2.4安装(一):Centos7安装
在进入大数据领域来,一直使用微软的Azure HDInsight,当前在中国区仅支持在Windows系统上部署集群,虽然创建的过程很简单,但对于开发人员来说,就是一个黑盒子,在更深入的研究和开发扩展的 ...
- 在iframe下的页面锚点失效问题,用jquery进行修复
应用场景是:iframe页面没有滚动条,在父窗体中出现滚动条,锚点标记就会失效,因为,锚点是根据当前窗口滚动条滚动窗口的,成为子窗体后没有了滚动条,自然不会滚动. 解决办法是:用js判断页面是否被嵌套 ...
- App开发者必备的运营、原型、UI设计工具整理
移动应用开发者们,Attention please!在接下来的内容里,我们将介绍一些能够提高你们的应用的知名度和品质水平的工具. 仔细看看,下面这些工具你们都知道吗,用过吗?如果你还不知道,或许可以尝 ...
- 【jmeter】基于InfluxDB&Grafana的JMeter实时性能测试数据的监控和展示
本文主要讲述如何利用JMeter监听器Backend Listener,配合使用InfluxDB+Grafana展示实时性能测试数据 关于JMeter实时测试数据 JMeter从2.11版本开始,命令 ...
- matlab 画三维图函数
matlab三维绘图 http://blog.sina.com.cn/s/blog_6d5ffd0d0100lyah.html Matlab绘图系列之高级绘图 http://blog.163.com/ ...
- jQuery实现文字放大效果
实现效果:当鼠标移动到超链接的那一瞬间就出现提示. <!DOCTYPE html> <html> <head> <meta charset="UTF ...
- MySQL瘦身
解压mysql-x.y.z-win32|64.zip 删除不用的目录:保留bin.data.share三个文件夹 删除bin里的多余文件:保留mysqld.exe.mysqladmin.exe (如果 ...