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第一次实验 ——凯撒密码的实现的更多相关文章

  1. 20155210 潘滢昊 Java第一次实验---凯撒密码

    Java第一次实验---凯撒密码 实验内容 实现凯撒密码,并进行测试. 实验代码 import java.io.*; import java.util.Scanner; public class ks ...

  2. JAVA第一次实验 ——凯撒密码

    课程:Java程序设计 班级:1352 姓名:黄伟业 学号:20135215 成绩:            指导教师:娄嘉鹏  实验日期:2015.4.15 实验密级: 预习程度:  实验时间:19: ...

  3. java:凯撒密码及String的应用

    一,凯撒密码 古罗马皇帝凯撒在打仗时曾使用过以下方法加密军事情报 现在用java实现 程序设计思想: 1,字符串首先要转化为字符数组,才能依次加密 2,当原来的字符为X,Y,Z时,加密后要转化为A,B ...

  4. 凯撒密码加密解密--JAVA实现(基础)

    凯撒密码一种代换密码,据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码.凯撒密码的基本思想是:通过把字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前) ...

  5. Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密

    凯撒密码加密 题目 问题描述 给定一个单词,请使用凯撒密码将这个单词加密. 凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文.即a变为d,b变为e,-,w变为z,x ...

  6. Java第一次实验

    北京电子科技学院(BESTI) 实验报告   课程: java实验    班级:1352     姓名:吕松鸿     学号:20135229  成绩: 指导教师: 娄嘉鹏    实验日期及时间:20 ...

  7. 凯撒密码 CH Round #57 - Story of the OI Class

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2357%20-%20Story%20of%20the%20OI%20Class/凯撒密码 题解:刚开始想map, ...

  8. Python的一个解释凯撒密码的程序

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' { Title:CaserCode Author:naiquan Type:crypto Detai ...

  9. 凯撒密码移位python

    #!/usr/bin/python'''凯撒密码'''a="gmbhqwertghjkcvbzn"s=[""]*len(a)for j in range(26) ...

随机推荐

  1. shadowssock+openvpn 2.2.2 成功*** -- 好文档 - 原理理解+架构

    [root@iZrj9j4lxhjopzii4vhw0lZ 2.0]# grep -v '^#' vars |grep -v '^$'export EASY_RSA="`pwd`" ...

  2. 第12章 GPIO输入-按键检测—零死角玩转STM32-F429系列

    第12章     GPIO输入—按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  3. N个数中第k个最大者

    #include<stdio.h> #include<stdlib.h> void bubbleSort(int arr[],int n) { int i,j; ;i>; ...

  4. javascript中的属性注意事项

    1.函数原型prototype设置的对象是只读类型,所以不能修改(即栈只读).但是我们常常可以看到它被“修改‘’了.若对象中定义的属性和原型中属性一样,优先使用自定义属性. 例如代码: //原型 类似 ...

  5. EasyX_无法填充圆颜色的问题

    官网:https://www.easyx.cn/ 在线帮助文档:https://docs.easyx.cn/ 目标:生成一个边框为黄色,填充为蓝色的圆 遇到的问题:使用以下代码,只能生成边框为黄色的圆 ...

  6. go语言笔记(一)

    packge main import "fmt" func main(){ fmt.println("hello") } 大括号约定 方法名首字母区分方法类型, ...

  7. Scratch 3.0 版本比较

    新年伊始MIT 就正式 发布了Scratch最新3.0版 ,以 HTML5.0 为基础的版本! 本文就来带看看3.0版有哪些更新的地方. 下图是进入后第一个画面,跟Scratch 2.0 很像,熟悉的 ...

  8. 2017-2018-1 20155306 《信息安全系统设计基础》嵌入式C语言———提取设置时分秒

    2017-2018-1 20155306 <信息安全系统设计基础>嵌入式C语言---提取设置时分秒 要求:根据下图,完成对时分秒的设置和提取. 示例及思路分析: 思路分析:以分钟为例,根据 ...

  9. Noip前的大抱佛脚----动态规划

    目录 动态规划 序列DP 背包问题 状态压缩以及拆分数 期望概率DP 马尔可夫过程 一类生成树计数问题 平方计数 动态规划 序列DP 有些问题: 求长度为\(l\)的上升子序列个数 形如一个值域的前缀 ...

  10. 一维码Codabar简介及其解码实现(zxing-cpp)

    一维码Codabar:由4条黑色线条,3条白色线条,合计7条线条所组成,每一个字元与字元之间有一间隙Gap做区隔. 条形码Codabar包含21个字元: (1).10个数字0~9; (2)." ...