实现一个功能,对指定密文进行解密
不是真正意义上的加密,可以说是凯撒密码吧。考验的其实就是字符串的处理,基础差,用比较笨的方法实现了,还参考了部分别人的代码:
已知的密文转换方式表:
* 大写字母:
* 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
* EB EC ED EE EF EG EH EI EJ EK EL EM EN EO EP FA FB FC FD FE FF FG FH FI FJ FK
*
* 小写字母:
* 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
* GB GC GD GE GF GG GH GI GJ GK GL GM GN GO GP HA HB HC HD HE HF HG HH HI HJ HK
*
* 数字:
* 1 2 3 4 5 6 7 8 9 0
* DB DC DD DE DF DG DH DI DJ DA
*
* 特殊符号:
* ~ ! @ # $ % ^ & * ( ) _ + - = { } | \ : ; ' " < > ? / , .
* HO CB EA CD CE CF FO CG CK CI CJ FP CL CN DN HL HN HM FM DK DL CH CC DM DO DP CP CM CO
*
* 空格:
* CA
*
* 分析:
* 1.输入一串密文
* 2.将密文每两个后面添加一个,号分隔。
* 3.将添加逗号的密文按照逗号分割存入数组,转换成明文后再将其拼凑
* 4.输出明文
public class demo {
public static void main(String[] args) throws UnsupportedEncodingException {
Scanner sc = new Scanner(System.in); //创建键盘录入对象
System.out.println("请输入密文:"); //提示
String input = sc.nextLine(); //接受
if ((input.length()%2) != 0) { //判断密文是否双数
System.out.println("抱歉!输入有误,请输入双数密文!");
}else {
StringBuffer sb = new StringBuffer(); //创建StringBuffer对象
String temp = input; //设置临时变量
int num = 1; //添加,号的截取长度
int len = input.length(); //输入字符串的总长度
String dd = null; //初始化
while(len > 0) { //利用while循环对驶入字符串进行添加,号分隔符操作
int index = getEndIndex(input,num); //调用方法
sb.append(temp.substring(0,index + 1)).append(",");
temp = temp.substring(index + 1);
len = temp.length();
dd = sb.toString();
}
String [] arr = dd.split(",");
for(int x=0;x<arr.length;x++) {
String da = arr[x];
String decode = null;
switch(da){
case "EB":
decode = "A";
break;
case "EC":
decode = "B";
break;
case "ED":
decode = "C";
break;
case "EE":
decode = "D";
break;
case "EF":
decode = "E";
break;
case "EG":
decode = "F";
break;
case "EH":
decode = "G";
break;
case "EI":
decode = "H";
break;
case "EJ":
decode = "I";
break;
case "EK":
decode = "J";
break;
case "EL":
decode = "K";
break;
case "EM":
decode = "L";
break;
case "EN":
decode = "M";
break;
case "EO":
decode = "N";
break;
case "EP":
decode = "O";
break;
case "FA":
decode = "P";
break;
case "FB":
decode = "Q";
break;
case "FC":
decode = "R";
break;
case "FD":
decode = "S";
break;
case "FE":
decode = "T";
break;
case "FF":
decode = "U";
break;
case "FG":
decode = "V";
break;
case "FH":
decode = "W";
break;
case "FI":
decode = "X";
break;
case "FJ":
decode = "Y";
break;
case "FK":
decode = "Z";
break;
case "GB":
decode = "a";
break;
case "GC":
decode = "b";
break;
case "GD":
decode = "c";
break;
case "GE":
decode = "d";
break;
case "GF":
decode = "e";
break;
case "GG":
decode = "f";
break;
case "GH":
decode = "g";
break;
case "GI":
decode = "h";
break;
case "GJ":
decode = "i";
break;
case "GK":
decode = "j";
break;
case "GL":
decode = "k";
break;
case "GM":
decode = "l";
break;
case "GN":
decode = "m";
break;
case "GO":
decode = "n";
break;
case "GP":
decode = "o";
break;
case "HA":
decode = "p";
break;
case "HB":
decode = "q";
break;
case "HC":
decode = "r";
break;
case "HD":
decode = "s";
break;
case "HE":
decode = "t";
break;
case "HF":
decode = "u";
break;
case "HG":
decode = "v";
break;
case "HH":
decode = "w";
break;
case "HI":
decode = "x";
break;
case "HJ":
decode = "y";
break;
case "HK":
decode = "z";
break;
case "DB":
decode = "1";
break;
case "DC":
decode = "2";
break;
case "DD":
decode = "3";
break;
case "DE":
decode = "4";
break;
case "DF":
decode = "5";
break;
case "DG":
decode = "6";
break;
case "DH":
decode = "7";
break;
case "DI":
decode = "8";
break;
case "DJ":
decode = "9";
break;
case "DA":
decode = "0";
break;
case "HO":
decode = "~";
break;
case "CB":
decode = "!";
break;
case "EA":
decode = "@";
break;
case "CD":
decode = "#";
break;
case "CE":
decode = "$";
break;
case "CF":
decode = "%";
break;
case "FO":
decode = "^";
break;
case "CG":
decode = "&";
break;
case "CK":
decode = "*";
break;
case "CI":
decode = "(";
break;
case "CJ":
decode = ")";
break;
case "FP":
decode = "_";
break;
case "CL":
decode = "+";
break;
case "CN":
decode = "-";
break;
case "DN":
decode = "=";
break;
case "HL":
decode = "{";
break;
case "HN":
decode = "}";
break;
case "HM":
decode = "|";
break;
case "FM":
decode = "\\";
break;
case "DK":
decode = ":";
break;
case "DL":
decode = ";";
break;
case "CH":
decode = "'";
break;
case "CC":
decode = "\"";
break;
case "DM":
decode = "<";
break;
case "DO":
decode = ">";
break;
case "DP":
decode = "?";
break;
case "CP":
decode = "/";
break;
case "CM":
decode = ",";
break;
case "CO":
decode = ".";
break;
case "CA":
decode = " ";
break;
}
System.out.print(decode);
}
}
}
private static int getEndIndex(String input, int num) throws UnsupportedEncodingException {
int index = 0;
double val = 0.00;
for(int i=0;i<input.length();i++) {
if (String.valueOf(input.charAt(i)).getBytes("UTF-8").length >= 3) {
val += 1.00;
}else {
val +=0.50;
}
if(val >=num) {
index = i;
if(val - num == 0.5) {
index = i-1;
}
break;
}
}
if(index == 0) {
index = input.length() - 1;
}
return index;
}
}