5.7.2 Commons Codec
Commons Codec在其1.4版本中对原有Base64类的实现做了扩充,增加了Url Base64算法支持,它舍弃了填充符,使用不定长Url Base64编码。
我们来看代码清单5-8如何实现Url Base64编码。
代码清单5-8 Url Base64处理2
import org.apache.commons.codec.binary.Base64;
/**
*Url Base64组件
*@author梁栋
*@version 1.0
*@since 1.0
*/
public abstract class UrlBase64Coder{
//字符编码
public final static String ENCODING="UTF-8";
/**
*Url Base64编码
*@param data待编码数据
*@return String编码数据
*@throws Exception
*/
public static String encode(String data)throws Exception{
//执行编码
byte[]b=Base64.encodeBase64URLSafe(data.getBytes(ENCODING));
return new String(b, ENCODING);
}
/**
*Url Base64解码
*@param data待解码数据
*@return String解码数据
*@throws Exception
*/
public static String decode(String data)throws Exception{
//执行解码
byte[]b=Base64.decodeBase64(data.getBytes(ENCODING));
return new String(b, ENCODING);
}
测试用例与代码清单5-7所示内容一致,作者就不在这里复述了。
注意控制台输出的信息:
原文:Java加密与解密的艺术
编码后:SmF2YeWKoOWvhuS4juino-WvhueahOiJuuacrw
解码后:Java加密与解密的艺术
对比Bouncy Castle的Url Base64编码后的信息:
原文:Java加密与解密的艺术
编码后:SmF2YeWKoOWvhuS4juino-WvhueahOiJuuacrw..
解码后:Java加密与解密的艺术
唯一的差别在于是否使用“.”符号作为填充符。显然,Commons Codec使用了不定长Url Base64编码。