异或加密解密
异或机密和解密工具类
package utils;
/**
* @ClassName: SecurityUtil
* @Description: TODO 加密和解密
* @author: wangyl
* @date: 2020年8月27日 下午2:27:57
*
*
*/
public class SecurityUtil {
/*
* 通过异或的方式实现加密和解密
* 开始前需要先捋清楚加密和解密的参数和返回值
* 参数:传入字符串 String(“abc”)
* 返回值:返回字符串 String(“xyz”)
*/
/**
*
* @Title: xor 异或的单词
* @Description: TODO
* @author: wangyl
* @param input 加密字符参数
* @return
* @return: String 加密后的字符串
*/
public String xor(String input){
/*
* 由于是使用异或的方式进行加密,但是异或是单独对每一个字符进行异或加密
* 也就是“abc”需要变成{a,b,c}
*/
char[] chs = input.toCharArray();
//获取到了字符数组后就需要对每个字符进行异或加密
for (int i = 0; i < chs.length; i++) {
//这里对每一个字符进行异或,这里使用12345进行异或
chs[i]=(char) (chs[i]^12345);
/**
* (char) (chs[i]^12345);
* 这里使用强制转换是因为chs[i]是char类型,12345是int类型,
* 直接异或会变成int类型(小类型到大类型自动转换)
* 单个字符串异或后需要将原来的值替换掉
* 接受的是个char类型,需要强制转换(大类型到小类型)
*/
}
//将加密后的字符数组转换成字符串并返回(这里没有新建对象世界使用input)
input = new String(chs);//使用String的构造方法转换
return input;
}
}
测试加密/解密
public static void main(String[] args){
//异或加密
String input = "异或加密测试";//需要加密的字符
String output = xor(input);//加密后输出的字符
System.out.println("异或加密结果:"+output);//异或加密结果:漻刯抙毿嵲믬
//异或解密
/**
* 异或第一次是加密,再异或第二次就是解密
* 这里参数使用加密后的字符串进行异或
*/
input = xor(output);
System.out.println("异或解密结果:"+input);//异或解密结果:异或加密测试
}
注意事项:
1、由于异或是可逆操作,异或的加密元素(12345)被发现后是可以被破解的
2、异或的字符串为什么不能直接异或,而是需要转换成字符后才能异或,原因是数字和字符串之间不能进行数学操作