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编码。