JAVA第一次实验 ——凯撒密码的实现
JAVA实验一 编写程序实现凯撒密码
201352330 潘俊洋
一.实验说明
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。
例如,如果字母的位数是3,明文字母B就变成了密文的E,依次类推,X将变成A,Y变成B,Z变成C,
由此可见,位数就是凯撒密码加密和解密的密钥。所以在程序中密钥key=3。
二.实验分析
1.由于字母表中共26个字符,因此移位前先将移动的位数(key)和26取模。由于Java中字符和整型可自动转换,因此将字符加上一个正整数即代表在字母表中右移多少位。
如果移动的位数是负值,则代表在字母表中左移多少位。尽管在移动之前已经将移动的位数和26取了模,但通过这种方式实现右移或左移仍可能发生超界。
如字母x右移3位应是字母a,但将字母x增加3后超出26个字母的范围。
因此移位后使用两个if语句判断一下,如果向左超界(c<'a')则增加26;向右超界(c>'z')则减去26。
程序中用户输入需要用到Scanner
例: Scanner input = new Scanner(System.in)
import java.util.ScannerScanner
Scanner input = new Scanner();
Scanner对象 是可以 读取控制台的输入 这是一般的对象创建方法. 加了一个对象System.in参数,表示传递的是键盘的输入
三.流程图

(本人并不擅长做流程图 qvq)
四.实验代码
import java.util.Scanner;
public class Test
{
void mj()
{
Scanner in = new Scanner(System.in);
System.out.print("请选择操作(1.加密 2.解密):");
int n=in.nextInt();
if(n == 1)
{
System.out.print("请输入待加密的字符串:");
String str = in.next();
String jm="";
int key = 3;//凯撒密码加密,向后移位3位
for(int i = 0;i < str.length();i++)
{
char c = str.charAt(i);
if(c >= 'a'&&c <= 'z')
{
if(c>='x'&&c<='z')
{
c-=26;
c+=key;
}
else
{
c+=key;
}
}
else if(c >= 'A'&&c <= 'Z')
{
if(c>='X'&&c<='Z')
{
c-=26;
c+=key;
}
else
{
c+=key;
}
}
jm += c;
}
System.out.print("加密后的字符串是:"+jm);
System.out.print("\n输入任意建继续,0结束程序:");
n=in.nextInt();
if(n==0)
{
System.out.print(" 谢谢使用本程序,欢迎再次使用!");
}
else
{
this.mj();
}
}
else if(n == 2)
{
System.out.print("请输入待解密的字符串:");
String str = in.next();
String jm="";
int key = -3;//凯撒密码解密,向前移位3位
for(int i = 0;i < str.length();i++)
{
char c = str.charAt(i);
if(c >= 'a'&&c <= 'z')
{
if(c>='a'&&c<='c')
{
c+=26;
c+=key;
}
else
{
c+=key;
}
}
else if(c >= 'A'&&c <= 'Z')
{
if(c>='A'&&c<='C')
{
c+=26;
c+=key;
}
else
{
c+=key;
}
}
jm += c;
}
System.out.println("解密后的字符串:"+jm);
System.out.print("\n输入任意建继续,0结束程序:");
n=in.nextInt();
if(n==0)
{
System.out.print(" 谢谢使用本程序,欢迎再次使用!");
}
else
{
this.mj();
}
}
else
{
System.out.print("请输入1或2,其他字符无效!\n输入任意建继续,0结束程序:");
n=in.nextInt();
if(n==0)
{
System.out.print(" 谢谢使用本程序,欢迎再次使用!");
}
else
{
this.mj();
}
}
}
public static void main(String[] args)
{
Test mj=new Test();
System.out.println("******欢迎使用凯撒密码******");
mj.mj();
}
}
五.运行测试

六.实验感受
在JAVA上实现了凯撒密码程序的设计和运行,结合密码学和JAVA的知识,同时提高和巩固了密码学和JAVA的学习内容。同时,也加强了对Scanner对象的理解(是可以 读取控制台的输入)和应用,因为刚开始接触所以并不熟悉。本次实验在算法上的难点就是对输入字符串的超界问题进行判断区分。
通过此次实验,对JAVA的兴趣越来越浓厚,希望今后能够更加熟练掌握这项计算机语言。
JAVA第一次实验 ——凯撒密码的实现的更多相关文章
- 20155210 潘滢昊 Java第一次实验---凯撒密码
Java第一次实验---凯撒密码 实验内容 实现凯撒密码,并进行测试. 实验代码 import java.io.*; import java.util.Scanner; public class ks ...
- JAVA第一次实验 ——凯撒密码
课程:Java程序设计 班级:1352 姓名:黄伟业 学号:20135215 成绩: 指导教师:娄嘉鹏 实验日期:2015.4.15 实验密级: 预习程度: 实验时间:19: ...
- java:凯撒密码及String的应用
一,凯撒密码 古罗马皇帝凯撒在打仗时曾使用过以下方法加密军事情报 现在用java实现 程序设计思想: 1,字符串首先要转化为字符数组,才能依次加密 2,当原来的字符为X,Y,Z时,加密后要转化为A,B ...
- 凯撒密码加密解密--JAVA实现(基础)
凯撒密码一种代换密码,据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码.凯撒密码的基本思想是:通过把字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前) ...
- Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
凯撒密码加密 题目 问题描述 给定一个单词,请使用凯撒密码将这个单词加密. 凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文.即a变为d,b变为e,-,w变为z,x ...
- Java第一次实验
北京电子科技学院(BESTI) 实验报告 课程: java实验 班级:1352 姓名:吕松鸿 学号:20135229 成绩: 指导教师: 娄嘉鹏 实验日期及时间:20 ...
- 凯撒密码 CH Round #57 - Story of the OI Class
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2357%20-%20Story%20of%20the%20OI%20Class/凯撒密码 题解:刚开始想map, ...
- Python的一个解释凯撒密码的程序
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' { Title:CaserCode Author:naiquan Type:crypto Detai ...
- 凯撒密码移位python
#!/usr/bin/python'''凯撒密码'''a="gmbhqwertghjkcvbzn"s=[""]*len(a)for j in range(26) ...
随机推荐
- 再起航,我的学习笔记之JavaScript设计模式05(简单工厂模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...
- SharePoint自动初始化网站列表
1,由于目前的SharePoint网站需要部署到多个服务器上,每个网站的内容都不一样,所以使用备份还原是不可以的.常用的方式便是将列表导出为列表模版,然后将列表模版复制到服务器上,根据列表模版创建列表 ...
- plsql developer连接oracle 12.2报错 ora-28040 No matching authentication protocol
使用plsql连接时,发现报ora-28040 No matching authentication protocol 赶紧查了查MOS,原来在默认情况下Oracle12.2对客户端版本有限制, 解决 ...
- InnoDB数据页结构
前言 关于数据库我们知道是通过内存对磁盘进行操作的,也知道数据会落实到磁盘上,但是数据在磁盘上的存储结构可能大家还不是很清楚. MySQL服务器上负责对表中的数据的读取和写入的工作的部分是存储 ...
- Android JS interaction
WebView web; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst ...
- mfc 类成员函数
知识点 类成员变量初值 类的构造函数 类成员函数 类成员函数的位置 一.类成员变量初值 二.类的构造函数 构造函数 是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值. 构造函 ...
- VBA 语言基础
VBA 语言基础 第一节 标识符 一.定义 标识符是一种标识变量.常量.过程.函数.类等语言构成单位的符号,利用它可以完成对变量.常量.过程.函数.类等的引用. 二.命名规则 1) 字母打头,由字母. ...
- [HNOI2015]开店 树链剖分,主席树
[HNOI2015]开店 LG传送门 蒟蒻表示不会动态淀粉质. 先把点按年龄排序, 设\(dis[i]\)表示\(i\)到根的距离. 把我们要算的东西稍微变下形:\(ans\) \[ = \sum \ ...
- JavaScript流程控制及函数
1 流程控制 1.1 条件语句 分支结构 单向分支 if (条件表达式) { code...} 双向分支 if (条件表达式){ } else { } <!DOCTYPE html& ...
- CSS中padding、margin、bordor属性详解
一.图解CSS padding.margin.border属性 W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以 ...