• 常用编码格式算法


    1、base64

    Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法。可查看 RFC2045 ~ RFC2049 ,上面有MIME的详细规范。

    Base64 编码是从二进制到字符的过程,可用于在 HTTP 环境下传递较长的标识信息。采用 Base64 编码具有不可读性,需要解码后才能阅读。

    Base64 由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上 “符号类” 字符(+, /, =),不同的应用场景又分别研制了 Base64 的各种 “变种”。为统一和规范化 Base64 的输出,Base62x 被视为无符号化的改进版本。

    引用:Base64百度百科

    按照 RFC2045 的定义,Base64 被定义为:Base64 内容传送编码被设计用来把任意序列的 8位字节 描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
    常见于邮件、http 加密,截取 http 信息,你就会发现登录操作的用户名、密码字段通过 BASE64 加密的。

    BASE64 的加密解密是双向的,可以求反解。

    案例实现:

    /**
     * Base64 编码、解码测试
     * <br/>
     */
    class Base64Test {
        public static void main(String[] args) {
    
            // 待编码的字符
            String originalStr = "111111";
            System.out.println(String.format("待编码的字符: %s", originalStr));
    
            /* jdk 实现 */
            System.out.println("=================jdk实现=================");
    
            // 获取编码器
            Base64.Encoder encoder1 = Base64.getEncoder();
    
            // 获取解码器
            Base64.Decoder decoder1 = Base64.getDecoder();
    
            // 编码测试
            byte[] encode1 = encoder1.encode(originalStr.getBytes());
            System.out.println(String.format("编码结果:%s", new String(encode1)));
    
            // 解码测试
            byte[] decode1 = decoder1.decode(encode1);
            System.out.println(String.format("解码结果:%s", new String(decode1)));
    
            /* Apache commons-codec 实现 */
            System.out.println("=================Apache commons-codec 实现=================");
    
            // 编码测试
            byte[] encode2 = org.apache.commons.codec.binary.Base64.encodeBase64(originalStr.getBytes());
            System.out.println(String.format("编码结果:%s", new String(encode2)));
    
            // 解码测试
            byte[] decode2 = org.apache.commons.codec.binary.Base64.decodeBase64(encode2);
            System.out.println(String.format("解码结果:%s", new String(decode2)));
    
            /* Spring 实现 */
            System.out.println("------------Spring 实现------------");
            String encodeToString = Base64Utils.encodeToString(originalStr.getBytes());
            System.out.println(String.format("编码结果:%s", encodeToString));
            System.out.println(String.format("解码结果:%s", new String(Base64Utils.decodeFromString(encodeToString))));
        }
    }
    

    运行结果如下:

    20191023215143.png


    2、base62x

    Base62x被视为无符号化的改进版本。

    码云地址:https://gitee.com/xenxin/Base62x

    目前用的人不多,还没有很好的 Java 实现,不过感觉未来会有发展。

    相关文章:Base62x比Base64的编码速度更快吗?


    3、url编码

    url编码 是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符,将数据排行等等)作为URL的一部分或者分离地发给服务器。不管哪种情况,在服务器端的表单输入格式样子象这样:

    theName=Ichabod+Crane&gender=male&status=missing& ;headless=yes

    当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成 application/x-www-form-urlencoded 字符串,表单里提交时也是如此,当包含非西欧字符的字符串时,系统也会将这些字符转换成 application/x-www-form-urlencoded 字符串。

    URL编码遵循下列规则:

    每对name/value由&;符分开;每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“”,它的ascii码是92,92的十六进制是5c,所以“”的url编码就是%5c。

    相关文章:


    Java实现:

    /**
        * URLEncoder & URLDecoder 测试
        */
    public static void main(String[] args) throws UnsupportedEncodingException {
        /* 测试编码 */
        // 将普通字符串转换成 application/x-www-form-urlencoded 字符串 采用 UTF-8 字符集进行编码
        String encode = URLEncoder.encode("北京大学", "UTF-8");
        System.out.println(String.format("编码结果:%s", encode));
    
        /* 测试解码 */
        //将 application/x-www-form-urlencoded 字符串转换成普通字符串 采用 UTF-8 字符集进行解码
        String decode = URLDecoder.decode(encode, "UTF-8");
        System.out.println(String.format("解码结果:%s", decode));
    }
    

    运行结果如下:

    20191023172337.png


    作者:不敲代码的攻城狮
    出处:https://www.cnblogs.com/leigq/
    任何傻瓜都能写出计算机可以理解的代码。好的程序员能写出人能读懂的代码。

     
  • 相关阅读:
    面试整理之DOM事件阶段
    头疼的闭包
    Bootstrap学习
    旁门左道通过JS与纯CSS实现显示隐藏层
    关于setTimeout的妙用前端函数节流
    兼容古董级IE小结
    Mongodb配置:error:10061 由于目标计算机积极拒绝,无法连接
    webpack入门前端必备
    团队成员的分应该怎么分?
    Start
  • 原文地址:https://www.cnblogs.com/leigq/p/13406516.html
Copyright © 2020-2023  润新知