zoukankan      html  css  js  c++  java
  • 编码技术

    一、编码

    1、base64 编码

      base64编码是将文本重新编码,转化成指定 64个可见ASCII字符的形式,这64个字符包括 A~Z, a~z, 0~9, + 和 /  

      其原理是将原文本按每3个字节取出来,每 6bit 依次拆开,首部补上2bit的0值,这样原本3字节的数据就变成了新的4字节。

      从原理可知,base64编码之后,最终文本会比原文本增加33.3%。

      需要注意的是,如果原文本取到最后,不足3字节,则不足6bit部分,除首部补上2bit的0值之外,尾部也补上0值,凑足8bit。

      那新拼成的4字节是按标准的ASCII码显示吗?不是,是按一份约定好的索引表,该表如下:

    数值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
    字符 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f
                                                                     
    数值 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
    字符 g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 + /

       需要注意的是,如果不足3字节,缺少几个字节就在最终编码后面补上几个=号,即最多可以补两个=号。

      比如对 go 进行 base64 ,首先就能猜到最终编码末尾会补上一个 = 号,然后我们看一下原文的ASCII码, g 是 103 即 01100111, o 是 111 即 01101111,放到一起是 0110011101101111,按每 6bit 分割为 011001 | 110110 | 1111 ,补好首部和尾部是 00011001 | 00110110 | 00111100 ,转成十进制为 25 | 54 | 60 ,查表得出 Z | 2 | 8,即 Z28,再补上一个=号,最终结果是 Z28=

      base64可以将不可见字符转成可见字符传输,在 STMP 协议和其它文本协议中比较常用。此外在HTTP协议中,有时也会进行base64或url编码,来转换掉一些特殊字符。

    2、url编码

    3、16进制编码(二进制编码、64进制编码[base64])

    4、ASCII码

  • 相关阅读:
    C#
    C#
    ssh学习笔记
    (已解决)Could not open '/var/lib/nova/mnt/*/volume-*': Permission denied
    RPCVersionCapError: Requested message version, 4.17 is incompatible. It needs to be equal in major version and less than or equal in minor version as the specified version cap 4.11.
    如何在linux下安装idea
    The system has no LUN copy license
    调整mysql数据库最大连接数
    mysql数据库编码问题
    cinder支持nfs快照
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/7240668.html
Copyright © 2011-2022 走看看