Java安全系列(1)——Base64加密

  严格的讲Base64并不是一种加密方法,他只是按照一定的规律,将字符串转为密文。Base64在最初被设计时,是用来对电子邮件进行处理的——在早期的电子邮件系统当中,传输协议仅支持ASCII码字符,当传输的内容非ASCII的字符时,就会发生问题。基于此,科学家和工程师发明了Base64算法,使得任意文字,都能转为ASCII码进行处理。

  Base64的基本算法,可以用以下几个步骤来描述:

  1.将给定的字符串以字符为单位转换为对应的字符编码(如ASCII码)。

  2.将获得的字符编码转换为二进制码。

  3.对获得的二进制码做分组转换操作,每3个8位二进制码为一组,转换为每4个6位二进制码为一组(不足6位时低位补0)。这是  一个分组变化的过程,3个8位二进制码和4个6位二进制码的长度都是24位(3×8=4×6=24)。

  4.对获得的4个6位二进制码补位,向6位二进制码添加2位高位0,组成4个8位二进制码。

  5.将获得的4个位二进制码转换为十进制码。

  6.将获得的十进制码转换为Base64字符表中对应的字符。

  由此可见,Base64加密,更像是一种字义转换,并且,他是可逆的,所以,Base64并不是主流的加密措施,它应用范围仅限于某些领域。例如,SSL/TLS证书信息,或是对URL信息进行编码,以便于传输特殊字符。

  Base64这个加密方法,JDK8本身是不提供的,通常我们需要使用第三方组件,我们这里以Apache Commons Codes 1.11为例,废话不多,直接送上代码。

import org.apache.commons.codec.binary.Base64;

public class Base64Utils {
	// 字符 编码
	public final static String ENCODING = "utf-8";

	/**
	 * Base64 编码
	 * 
	 * @param plaintext    明文
	 * @return String      密文
	 * @throws Exception
	 */
	public static String encode(String plaintext) throws Exception {
		// 执行 编码
		byte[] b = Base64.encodeBase64(plaintext.getBytes(ENCODING));
		return new String(b, ENCODING);
	}

	/**
	 * Base64 安全 编码 遵循 RFC 2045 实现 RFC 2045标准:Base64编码,每76行,增加一个换行符 \r\n
	 * ,常见场景是SSL/TLS证书内容,即是Base64编码
	 * 
	 * @param plaintext    明文
	 * @return String      密文
	 * @throws Exception
	 */
	public static String encodeSafe(String plaintext) throws Exception {
		// 执行 编码
		byte[] b = Base64.encodeBase64(plaintext.getBytes(ENCODING), true);
		return new String(b, ENCODING);
	}

	/**
	 * Base64 解码
	 * 
	 * @param ciphertext 密文
	 * @return String    明文
	 * @throws Exception
	 */
	public static String decode(String data) throws Exception {
		// 执行 解码
		byte[] b = Base64.decodeBase64(data.getBytes(ENCODING));
		return new String(b, ENCODING);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值