编写程序,要求输入一个字符串,然后输入一个句子作为凯撒加密算法的密钥,然后输出该字符串加密后的结果。

举例如下:使用改进版caesar密码,密钥为I love my country!,明文为I am in danger!,计算出密文。

小写明文字母和大写密文字母的映射关系表如下图1,构造方法如下:第一行明文字母填写就是26个字母按顺序写,第二行密文字母顺序就是先把密钥句子(I love my country,注意重复字母去掉)写入密文字母里,然后再清点26个字母中没有写进密文的剩下字母按照字母表顺序依次写完。

明文

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

密文

I

L

O

V

E

M

Y

C

U

N

T

R

A

B

D

F

G

H

J

K

P

Q

S

W

X

Z

|-----密钥句子去掉重复字母-----||---26个字母剩下的按字母表顺序写入---|

图1 小写字母的映射表

因为密文是去掉标点符号后全部都是大写输出,究其原因是为了敌人(破译者)根据空格和标点符号和首字母大写等习惯猜出哪些字母在一起是一个完整单词。所以我们译文要去掉所有标点符号而且把所有字母都变成大写。所以根据图1我们得出图2大写字母对应的映射表,就是把图1的第一行全部变成大写即可。

明文

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

密文

I

L

O

V

E

M

Y

C

U

N

T

R

A

B

D

F

G

H

J

K

P

Q

S

W

X

Z

|-----密钥句子去掉重复字母-----||---26个字母剩下的按字母表顺序写入---|

图2 大写字母的映射表

有了映射关系表,然后明文为I am in danger!,密文为UIAUBVIBYEH,注意密文一定是大写,所以密文是去掉标点符号后所有大小写都变成大写的密文输出。

代码实现:

/*实现进阶版凯撒密码*/

importjava.util.ArrayList;importjava.util.Scanner;public classCaesar {public static voidmain(String[] args) {

Scanner sc= newScanner(System.in);

System.out.print("明文:");

String mingwen=sc.nextLine();

System.out.print("密钥:");

String key=sc.nextLine();

String st=kaesarUpVersion(removeSymbol(mingwen),getKey(removeSymbol(key)));

System.out.println("密文:"+st);

}//实现将其他字符删除

public staticString removeSymbol(String s){//创建一个字符串生成器

StringBuilder sb = newStringBuilder();//遍历字符串s

for (int i = 0; i

char ch =s.charAt(i);//如果字符是字母,添加到字符串生成器

if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){

sb.append(ch);

}

}//转换成字符串

String str =sb.toString();return str.toUpperCase();//以大写字母返回

}//传入一个字符串,实现密文,并以大写字符串形式返回

public staticString getKey(String string){//创建一个动态数组对象

ArrayList list = new ArrayList<>();//遍历字符串

for (int i = 0; i

String st = string.substring(i,i+1).toUpperCase();//使用contains函数,对数组内元素进行比较,皆不同时,添加进数组

if (!list.contains(st)){

list.add(st);

}

}//添加剩余的字母,形成映射表

for (char i = 65; i <=90 ; i++) {//valueOf函数将char类型转化为String类型

String str =String.valueOf(i);if (!list.contains(str)){

list.add(str);

}

}//创建字符串生成器对象

StringBuilder stringBuilder = newStringBuilder();//将list数组的元素依次添加到生成器中

for(String s : list) {

stringBuilder.append(s);

}//转换为字符串,并返回

String end =stringBuilder.toString();returnend;

}//根据明文和密钥,进行加密

public staticString kaesarUpVersion(String s, String key){//将字符串转换成char类型的数组

char[] charS =s.toCharArray();char[] charKey =key.toCharArray();//创建字符串生成器

StringBuilder builder = newStringBuilder();//遍历明文字符数组,由对应关系产生密文

for (int i = 0; i

builder.append(charKey[j]);

}//转换为字符串并输出

String miwen =builder.toString();returnmiwen;

}

}

java实现凯撒密码_Java实现进阶版凯撒密码相关推荐

  1. Java基础学习笔记(二)_Java核心技术(进阶)

    本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...

  2. java绕过加密密码_JAVA中使用MD5加密实现密码加密

    1.新建Md5.java package com.loger.md5; import java.io.UnsupportedEncodingException; import java.securit ...

  3. java用户登录记住密码_java项目中登陆时记住密码

    1.在登陆的时候记住密码,不知自动登陆: 2.登陆页面,填写用户名,密码,点击记住密码,下次进入登陆页面的时候,填写同样的用户名,密码自动填充(在不一次会话的情况下也就是说在不关闭浏览器的情况下): ...

  4. java 值传递 引用传递_Java小白进阶之值传递-引用传递

    class ClassA{ int value;//成员变量 } public class TestClassA{ public static void main(String args[]){ in ...

  5. java zip 解压 密码_Java解压和压缩带密码的zip文件过程详解

    前言 JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名. 为了解决ZIP压缩文件的密码问题,在网上搜索良久,终于找到了winzi ...

  6. java压缩文件详解_Java解压和压缩带密码的zip文件过程详解

    前言 JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名. 为了解决ZIP压缩文件的密码问题,在网上搜索良久,终于找到了winzi ...

  7. java 8位随机数字_java随即产生8位数的密码

    原文链接 http://blog.csdn.net/herrapfel/article/details/1885016 此处仅作记录使用 在Java中我们可以使用java.util.Random类来产 ...

  8. java byte char io流_Java基础进阶 IO流之字节流

    1.IO流 1.1.概述 之前学习的File类它只能操作文件或文件夹,并不能去操作文件中的数据.真正保存数据的是文件,数据是在文件中.而File类它只是去对文件本身做操作,不能对文件中的数据进行操作. ...

  9. java实现登录注册案例_Java基于IO版实现用户登录注册的案例

    下面小编就为大家带来一篇基于IO版的用户登录注册实例(Java).小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 今天学的是用户登录注册功能. 4个包: itcast.c ...

  10. java通讯录源码下载_Java通讯录手机版源码JAVA源码下载

    运行在手机上的一款通讯录程序,是用Java编写的,现在附上所有的源码,请在Eclipse下尝试运行这套程序,这样能够减少您的很多步骤.有兴趣的朋友好好研讨一下. Java通讯录手机版源码 (1 fol ...

最新文章

  1. Debian Linux下的Python学习——控制流
  2. Python大佬 | 菜鸟进阶必备的九大技能!
  3. 命名实体识别遇到的问题
  4. springboot 获取bean_SpringBoot高级(自动配置 事件监听 监控)
  5. 单片机的 FIFO循环队列实现
  6. java前端和后端的区别,看这一篇就够了!
  7. List集合排序、自定义比较器排序
  8. 视频数据集UCF101的处理与加载(用PyTorch实现)
  9. 用类描述计算机中CPU的速度和硬盘的容量,要求Java应用程序有4个类,名字分别为:pc CPU harddisk 和Test ,其中TEST是主类。
  10. 实时网速怎么看快慢_iQOO怎么显示网速 网络状态实时查看
  11. 一些成功又不失趣味的网络营销案例
  12. ps换背景操作,巨简单
  13. linux sfc模拟器,PSP适用SFC模拟器Snes9x完全使用教程
  14. 三、实战---爬取百度指定词条所对应的结果页面(一个简单的页面采集器)
  15. Java论坛系统--3.系统用户角色权限表结构设计
  16. C语言 | 文件打开关闭
  17. 如何在ubuntu 18.04上设置设置sougo拼音输入法
  18. 时间复杂度的表示方式
  19. 晋中学院计算机信息与技术学院,晋中学院
  20. Tomcat 7 相关参数优化说明及配置最佳案例

热门文章

  1. 快速了解WordNet
  2. pytorch F.conv2d(函数式接口)
  3. Memory ordering in some architectures
  4. glibc静态链接 libc.a(nsswitch.o)(.data+0x64):undefined reference to `_nss_files_getaliasent_r' 错误解决方法
  5. win32汇编 钩子的编写与使用
  6. 熊猫烧香C语言源代码,熊猫烧香病毒是不是用C语言编的
  7. php下载安装教程,PHP下载安装教程
  8. linux mate桌面主题下载_5个适用于Linux的最佳图标主题
  9. 查找对方IP地址经典技巧汇总
  10. 20个最强的基于浏览器的在线代码编辑器