前言
- 时间:2020.3.28
- 备注:参考了网上的写法,有点没理解长于密钥值就再次使用是什么意思,我用到的就是单纯往ASCII码后移5位加密,这样子加密解密的结果都是同样的位数,仿佛没用上数据结构的东西。。
题目
- 凯撒加密及解密:利用一列密钥值将消息中各个字母移动不同的位数。如果消息长于这列密钥值,可以从头再次使用这列密钥。请设计算法实现加密及解密,1)输入消息后,将加密后的密钥输出;2)输入密钥值,将原消息解密出来并输出。
代码
import java.util.Scanner;
public class TestMain {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
/* 1.输入原消息 */
//加密方式:将字母按字母表的顺序向右移动一定的位数
System.out.print("Input beforeText: ");
String beforeText = scan.next();
int digit = 5;
String keyText = Encry(beforeText,digit);
/* 2.输出密钥值 */
System.out.println("After encryption: " + keyText);
/* 3.输入密钥值 */
System.out.print("Input keyText: ");
String afterText = scan.next();
/* 4.输出原消息 */
System.out.println("After encryption: " + Decry(afterText,digit));
}
//加密方法
private static String Encry(String beforeText, int digit) {
char[] chars = beforeText.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = (char) (chars[i] + digit);
chars[i] = c;
}
return new String(chars);
}
//解密方法
private static String Decry(String keyText, int digit) {
char[] chars = keyText.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = (char) (chars[i] - digit);
chars[i] = c;
}
return new String(chars);
}
}