commons-codec 加密算法引用

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个汉字。
 

猜你喜欢

转载自blog.csdn.net/word_joke/article/details/83145199