这里直接贴源码了,拿去用jdk11编译吧
import java.util.Base64;
import java.util.Scanner;
public class Decoder {
public static void main(String[] args) {
String source="";
Scanner scan=new Scanner(System.in);
System.out.print("请输入加密后的字符串:");
source=scan.next();
source=decode(source);
System.out.println(source);
}
/*解码器,逆向破解flag*/
private static String decode(String source) {
String flag="";
source=unrot13(source); //根据源代码,先进行rot13解密,得到反转的base64编码
source=reverse(source); //反转base64编码,得到原始的base64编码
byte[] byte_source=Base64.getDecoder().decode(source.getBytes()); //对原始base64编码进行解密
source=new String(byte_source);
for(int i=0;i<source.length();i++) { //对字符串进行遍历
char tmp=source.charAt(i); //按顺序获取一个字符
int ascii=(int)tmp; //将字符转化为ascii码
ascii-=1; //将所有字符的ascii码减去1
flag=flag+(char)(Integer.parseInt(String.valueOf(ascii))); //将ascii转为字符挨个添加进flag
}
return reverse(flag); //最后进行反转后返回
}
/*
* 自己写的rot13解码器
* */
private static String unrot13(String source) {
String result=""; //存储结果的String
for(int i=0;i<source.length();i++) { //遍历字符串
char temp=source.charAt(i); //轮流获取单个字符
if(Character.isDigit(temp)) { //如果此字符是数字则不用参与rot13解密
result+=temp;
continue;
}
int ascii=(int)temp; //将字符转化为ascii码
if(ascii>=65&&ascii<=90) { //判断大小写,如果是大写则进入if语句,小写则进入else语句
if(ascii<78) { //判断是否为N或N之后的字母
ascii+=13; //N之前的字母,ascii码加13
}else if(ascii>=78) {
ascii-=13;
}
}else {
if(ascii<110) {
ascii+=13;
}else if(ascii>=110) {
ascii-=13;
}
}
result+=(char)Integer.parseInt(String.valueOf(ascii));
}
return result;
}
/*
* 一个反转字符串的小工具
* */
private static String reverse(String source) {
char[] chars = source.toCharArray();
String reverse = "";
for (int i = chars.length - 1; i >= 0; i--) {
reverse += chars[i];
}
return reverse;
}
}