(开发支持类库)Base64加密与解密

Base64加密与解密

正常来讲加密基本上永远都要伴随着解密,所谓的加密或者解密往往都需要一些规则。 在JDK1.8开始提供有一组新加密处理类,Base64处理,在这个类里面有两个内部类:

  • Base64.Encoder:进行加密处理;
  • public byte[] encode​(byte[] src)     使用Base64编码方案将指定字节数组中的所有字节编码为新分配的字节数组
  • Base64.Decoder:进行解密处理;
  • public byte[] decode​(byte[] src):    使用Base64编码方案解码输入字节数组中的所有字节,将结果写入新分配的输出字节数组。

范例:实现加密与解密操作

 

package 开发支持类库;

import java.util.Base64;

public class Base64类 {
	public static void main(String[] args) {
		//加密
		String msg = "加密内容";		//要发送的信息内容
		//getEncoder()返回一个Base64编码方案,encode利用此方法进行加密
		byte[] enMsg =  Base64.getEncoder().encode(msg.getBytes());	//数据加密
		String enString = new String(enMsg);	//转换为String
		System.out.println("加密后:"+enString);
		
		//解密
		byte[] deMsg = Base64.getDecoder().decode(enMsg); //解密,getDecoder()返回一个Base64编码方案,decode进行解密
		String deString = new String(deMsg);
		System.out.println("解密结果:"+deString);
	}
}

加密后:vNPD3MTayN0=
解密结果:加密内容

虽然Base64可以实现加密与解密处理,但是由于是一个公版的算法,所以直接对数据进行加密往往不安全,那么最好的方法是使用盐值操作

String salt = "javaDemo";	//定义盐值
String msg = "加密内容"+"{"+salt+"}";		//加上了盐值,数据不只有加密内容

即便现在盐值实际上发现加密的效果也不是很好,最好的做法是多次加密。

范例:复杂加密操作

package 开发支持类库;

import java.util.Base64;

public class Base64类 {
	public static void main(String[] args) {
		//加密
		String str =StringUtil.encode("加密内容") ;
		System.out.println(str);
		
		//解密
		str = StringUtil.decode(str);
		System.out.println(str);
	}
}


class StringUtil{
	private static final String SALT = "盐值";	//公共的盐值
	private static final int RPEAT = 3;	//加密次数
 	/**
	 * 加密处理
	 * @param str	要加密的字符串,需要与盐值整合
	 * @return	加密后的数据
	 */
	public static String encode(String str) {	//加密处理
		String temp = str +"{"+SALT+"}";	//盐值对外不公布
		byte data[] = temp.getBytes();	//将字符串变为字节数组
		
		for(int x = 0;x <RPEAT ;x++) {
			data = Base64.getEncoder().encode(data);	//重复加密
		}
		
		return  new String(data);	//字节数组转为字符串,返回加密结果
		
	}
	
	/**
	 * 解密处理
	 * @param str	解密的字符串
	 * @return 解密后的内容
	 */
	public static String decode(String str) {
		byte data[] = str.getBytes();//将字符串变为字节数组
		
		for(int x = 0;x <RPEAT ;x++) {
			data = Base64.getDecoder().decode(data);	//重复解密,之前加密多少次就解密多少次
		}
		
		return new String(data).replaceAll("\\{\\S+\\}", "");//S表示任何非空格的字符,将括号和里面所有内容替换成null,字节数组转为字符串,返回解密结果
		
	}
}

ZGs1UVJETk5WR0Y1VGpFM01HTTNWM1JZTUQwPQ==
加密内容

最好是使用2-3种加密程序,同时在找到一些完全不可解密的加密方法。

猜你喜欢

转载自blog.csdn.net/weixin_46245201/article/details/112601248
今日推荐