攻防世界题目web2解答(java源码)

该博客提供了一段Java源码,用于实现Base64解码、ROT13解密及字符串反转等功能。通过输入加密后的字符串,程序首先进行ROT13解密,然后反转Base64编码,再使用Java的Base64工具类进行解码,最后对解码后的字符串逐字符处理,ASCII码减1并反转,以解密最终的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里直接贴源码了,拿去用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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值