Java——加密(java.util.Base64)

------------------------------------------------------------
  Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

package com.dpp_java;

import java.util.Base64;

public class Test {

	public static void main(String[] args)  {
		String str = StringUtil.encode("This is my scrent.");  // 加密
		System.out.println(str);  // 输出信息对应字符串
		System.out.println(StringUtil.decode(str));  // 输出解密后即原本加密的信息:“This is my scrent.”
	}
}

class StringUtil {
	/**
	 * 注:
	 * 1|-:加密接受的是字符数组,解密也是
	 * 		|-:public byte[] encode(byte[] src)
	 * 		|-:public byte[] decode(byte[] src)
	 * 		|-:public static class Base64.Decoder extends Object
	 * 		|-:public static class Base64.Encoder extends Object
	 * 2|-:加密算法是公版算法,所以重点在于算法层数,别人不知道算法层数也就无法揭密处原信息.
	 * 3|-:加入盐值,为加密增加复杂度.
	 * 大致思路如下:
	 * 1、加密过程:分别对盐值和信息进行加密,加密层数不一样,再将加密后获得的字符串拼接
	 * 2、解密过程:直接删去盐值加密后的字符串,即只剩下所需要的信息加密后的字符串,将之解密即可
	 */
	private static final String SALT = "ymu.eit";  // 加密盐值
	private static final int REPAT = 10;  // 加密次数
	private static String saltEncode() {  // 盐值加密
		byte[] data = SALT.getBytes();
		for ( int i = 0; i < REPAT-3; i++ ) {
			data = Base64.getEncoder().encode(data);
		}
		return new String(data);
	}
	private static int getSalt() {  // 获取盐值加密后的长度
		return saltEncode().length();
	}
	
	public static String encode( String str  ) {
		byte[] data = str.getBytes();  // 将字符串转变为字符数组
		for ( int i = 0; i < REPAT; i++ ) {
			data = Base64.getEncoder().encode(data);
		}
		return new String(data) + saltEncode();
	}
	public static String decode( String str ) {
		byte[] data = str.substring(0, str.length()-getSalt()).getBytes();  // 减去盐值对应字符串
		for ( int i = 0; i < REPAT; i++ ) {
			data = Base64.getDecoder().decode(data);  // 普通解密过程
		}
		return new String(data);  // 返回信息
	}
}
// 输出结果
Vm0wd2QyUXlVWGxXYTFwT1ZsZG9WRll3WkRSV1ZsbDNXa1JTVjJKSGVGWlZNakExVmpKS1NHVkdiR0ZXVjFKSVZtMXplRmRIVmtWUmJVWlRWbXhzTTFkV1pEUlpWMUpYVW01T2FGSnRVbkJXTUZwSFRURmFjbHBFVWxSTmJFcFlWVzAxVDJGR1NuUlZiRkpWVmtWYVRGWldXbXRYUjFKSVpFWlNUbFpVVmtwV2JHUXdWakZrU0ZOclpHcFNWR3hoVm1wT1UxWXhjRVZTYlhSWFRWZFNNRnBGV2xOVWJVWTJVbFJDVjFaRmEzaFZha1pXWlVaa2NsWnNTbGRTTTAwMQ==Vm1wS05GbFhSblJXYTFwT1ZteHdjMVV3V2t0WFJteDBaRVYwYW1KR1dsaFdWbWhyVlVaV1ZVMUVhejA9
This is my scrent.

你可能感兴趣的:(编程)