异或加密:
异或符号 ^
规则:同为0, 异为1。一个数,两次异或之后,是原数本身
结论:异或一次是加密,异或二次是解密 (异或加密是可逆的)
示例代码
public class EncryptionTest
{
public static String xor(String input){
// 1.将字符串装为字符数组
char[] chars = input.toCharArray();
for (int i = 0; i <chars.length ; i++)
{
// 2.将每个字符进行异或操作
chars[i] = (char) (chars[i]^20);
}
return new String(chars);
}
@Test
public void test(){
String abc="abc";
abc= xor(abc); // 第一次异或操作 相当于加密操作
System.out.println(abc);
abc = xor(abc); // 第二次异或操作 相当于解密操作
System.out.println(abc);
}
}
运行结果
MD5加密
MD5加密是不可逆的,安全性高。
在使用MD5之前需要导入第三方jar包,jar包下载地址:https://mvnrepository.com/artifact/commons-codec/commons-codec
maven依赖
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
示例代码
public static String md5Encode(byte [] input){
return DigestUtils.md5Hex(input);
}
@Test
public void test2(){
String a="hello";
String s = md5Encode(a.getBytes());
System.out.println(s);
}
运行结果(十六进制的数)
sha256加密
sha256加密是不可逆的,安全性高。使用之前一样要到入commons-codec包 也就是md5需要导入的包
示例代码
public static String sha256Encode(byte [] input){
return DigestUtils.sha256Hex(input);
}
@Test
public void test3(){
String a="hello";
String s = sha256Encode(a.getBytes());
System.out.println(s);
}
运行结果
base64加密解密
base64是jdk自带的,不需要导入第三jar包
base64是可逆的
示例代码
// base64解密
public static byte[] base64Decode(String input){
byte [] result= null;
try
{
// 通过反射得到base64
Class<?> clazz = Class.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
// 通过反射得到base64中加密的方法
Method method=clazz.getMethod("decode", String.class);
// 通过反射掉方法
result =( byte [] ) method.invoke(null, input);
}
catch (Exception e)
{
e.printStackTrace();
}
return result;
}
@Test
public void test4(){
String str="hello";
String s = base64Encode(str.getBytes());
System.out.println(s); // 加密结果aGVsbG8=
byte[] bytes = base64Decode("aGVsbG8=");
System.out.println(new String(bytes)); // 解密结果hello
}
运行结果