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) ...
随机推荐
- C#中 DateTime , DateTime2 ,DateTimeOffset 之间的小区别 (转载)
闲来无事列了个表比对一下这3兄弟之间还是有一点差距的╮(╯_╰)╭ DateTime DateTime2 DateTimeOffset 日期范围 1753-01-01到 9999-12-31 00 ...
- C++学习第一天(helloword)
C++编译过程 #include <iostream> //iostream 提供了一个叫命名空间的东西,标准的命名空间是std 包含了有关输入输出语句的函数 // input&^ ...
- rem布局简介
移动端常见布局: 1.流式布局 高度固定,宽度自适应 2.响应式布局 能够用一套代码适应不同尺寸屏幕 3.rem布局 宽高自适应,能实现整个页面像一张图片一样缩放且不失真的效果. rem布局: em: ...
- 基于Babylon.js编写简单的骨骼动画生成器
使用骨骼动画技术可以将网格的顶点分配给若干骨头,通过给骨头设定关键帧和父子关系,可以赋予网格高度动态并具有传递性的变形 效果.这里结合之前的相关研究在网页端使用JavaScript实现了一个简单的骨骼 ...
- JavaEE笔记(七)
Struts获取如何获取请求响应和回话 //获取HttpServletRequest HttpServletRequest request = ServletActionContext.getRequ ...
- 【SDOI2011】工作安排
题面 题解 如果没有分段函数的限制的话就很好做了 但是我们发现分段函数的段很少,我们就可以将每一段拆开, 强制限制一定流量就可以了 代码 #include<cstdio> #include ...
- 洛咕 P4304 [TJOI2013]攻击装置
把坐标按照(x+y)%2染色可以发现这是个二分图 二分图最大独立集=点数-最大匹配 于是就是个算匹配的傻逼题了 // luogu-judger-enable-o2 #include<bits/s ...
- docker创建image方法以及常用指令介绍
docker -help # 显示帮助 docker COMMAND -help # 帮助信息更详细 docker start “容器名称” # 启动一个或多个容器 docker s ...
- ATmega8仿真——LED 数码管的学习
1. I/O 口的结构及特点 Atmega8 有23 个I/O 引脚,分成3 个8 位的端口B.C 和D,其中C 口只有7 位 Atmega8 采用3个8位寄存器来控制I/O端口,它们分别是:方向寄存 ...
- 英文样式教师求职简历免费word模板
10款英文样式教师求职简历免费word模板,也可用于其他专业和职业,个人免费简历模板,个人简历表免费,个人简历表格. 声明:该简历模板仅用于个人欣赏使用,请勿用于商业用途,谢谢. 下载地址:百度网盘, ...