缺陷:密码容易推敲。
package com.ruoyi.web.controller;
import java.util.Scanner;
public class Encryption {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("明文 :");
String str = input.next(); // 从键盘输入字符串
System.out.print("密码 K = ");
int K = input.nextInt(); // 从键盘输入密码K
String newStr = new String(); // 创建新字符串存储密文
for (int i = 0; i < str.length(); i++) {
char temp = str.charAt(i);
if (temp >= 65 && temp <= 90) { //判断是否为大写字母
newStr += encryptChar(temp, K, 65, 26);
}
else if (temp >= 97 && temp <= 122) { // 判断是否为小写字母
newStr += encryptChar(temp, K, 97, 26);
}
else if (temp >= 48 && temp <= 57) { // 判断是否为数字
newStr += encryptChar(temp, K, 48, 10);
}
else {
newStr += temp;
}
}
System.out.println("密文 :" + newStr);
String FFF = new String();
for (int i = 0; i < newStr.length(); i++) {
char temp = newStr.charAt(i);
if (temp >= 65 && temp <= 90) { //判断是否为大写字母
FFF += jiemiChar(temp, K, 90,65, 26);
}
else if (temp >= 97 && temp <= 122) { // 判断是否为小写字母
FFF += jiemiChar(temp, K, 122, 97,26);
}
else if (temp >= 48 && temp <= 57) { // 判断是否为数字
FFF += jiemiChar(temp, K, 57, 48,10);
}
else {
FFF += FFF;
}
}
System.out.println("解密 :" + FFF);
}
public static char encryptChar(char ch, int key, int minAscii, int mod) {
/* 根据字符ASCII码和不同的空间进行加密
* ch为所需加密的字符
* key为密码
* minAscii用以判断空间,65为大写字母,97为小写字母,48为数字空间
* mod为空间长度
*/
int temp = Integer.valueOf(ch);
temp = (temp - minAscii + key) % mod + minAscii;
return (char) temp;
}
public static char jiemiChar(char ch, int key, int maxAscii, int minAscii,int mod) {
/* 根据字符ASCII码和不同的空间进行加密
* ch为所需加密的字符
* key为密码
* minAscii用以判断空间,65为大写字母,97为小写字母,48为数字空间
* mod为空间长度
*/
int temp = Integer.valueOf(ch);
temp=-(maxAscii-temp+key) % mod + maxAscii;
return (char) temp;
}
}