commons-codec
是Apache开源组织提供的用于摘要运算、编码的包。在该包中
主要分为四类加密:
BinaryEncoders、DigestEncoders、LanguageEncoders、NetworkEncoders。
//Base64
@Test
public void ByteEncode() {
String data = "sssssss";
byte[] dataByte = data.getBytes();
//加密:
Base64 base64 = new Base64();
String code = base64.encodeAsString(dataByte);
System.out.println(code);
//解密:
String decodes = new String(base64.decode(code));
System.out.println(decodes);
}
输出结果:
//MD5摘要运算
@Test
public void MD5Test() {
String name ="阿萨德撒多";
//加密:
String hex = DigestUtils.md5DigestAsHex(name.getBytes());
System.out.println(hex);
}
//URLCodec
@Test
public void URLTest() {
String name = "撒大声地";
URLEncoder urlEncoder = new URLEncoder();
//加密:
String encode = urlEncoder.encode(name, "UTF-8");
System.out.println(encode);
try {
//解密:
String decode = URLDecoder.decode(encode, "UTF-8");
System.out.println(decode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
输出:
注意:
request.getParameter("name")之前会自动做一次解码的工作,
默认的ISO-8859-1,相当于调用了一次java.net.URLDecoder.decode(name, "ISO-8859-1")
所以我们再用URLDecoder.decode(name, "UTF-8")就是乱码了。
java的web开发中URLEncoder.encode方法要为什么要调用两次?
编码2次的字符串是%25E6%25B5%258B%25E8%25AF%2595 ,
服务器端用request.getParameter("name")的到参数,
自动按ISO-8859-1解码得到的串是%E6%B5%8B%E8%AF%95 ,
也就是编码一次得到的字符串。
我们在System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));
解码输出,得到的结果就是 “原文内容” 2个汉字。