【2018-05-19】TLS学习笔记-Base64 [历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2018-05-19 标题TLS学习笔记-Base64分类编程 标签tls·base64TLS简单笔记-Base64参考链接《 http://www.cnblogs.com/chengmo/archive/2014/05/18/3735917.html 》《 https://www.cnblogs.com/christychang/p/5988384.html 》Base64编码是我们程序开发中经常使用到的编码方法。它是一种基于用64个可打印字符来表示二进制数据的表示方法。Base64是用64个可打印字符表示二进制所有数据方法。由于2的6次方等于64所以可以用每6个位元为一个单元对应某个可打印字符。我们知道三个字节有24个位元就可以刚好对应于4个Base64单元即3个字节需要用4个Base64的可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 这样共有62个字符此外两个可打印符号在不同的系统中一般有所不同。但是我们经常所说的Base64另外2个字符是“/”。转换的时候将三个byte的数据先后放入一个24bit的缓冲区中先来的byte占高位。数据不足3byte的话于缓冲区中剩下的bit用0补足。然后每次取出6个bit按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/中的字符作为编码后的输出。不断进行直到全部输入数据转换完成。假设我们对Hello进行Base64编码按照ASCII表其转换过程如下图所示可知Hello的Base64编码结果为SGVsbG8h原始字符串长度为6个字符串编码后长度为8个字符每3个原始字符经编码成4个字符。但要注意Base64编码是每3个原始字符编码成4个字符如果原始字符串长度不能被3整除怎么办使用0来补充原始字符串。以Hello为例其转换过程为Hello!! Base64编码的结果为 SGVsbG8hIQAA 。最后2个零值只是为了Base64编码而补充的在原始字符中并没有对应的字符那么Base64编码结果中的最后两个字符 AA 实际不带有效信息所以需要特殊处理以免解码错误。标准Base64编码通常用 字符来替换最后的 A即编码结果为 SGVsbG8hIQ。因为 字符并不在Base64编码索引表中其意义在于结束符号在Base64解码时遇到 时即可知道一个Base64编码字符串结束。如果Base64编码字符串不会相互拼接再传输那么最后的 也可以省略解码时如果发现Base64编码字符串长度不能被4整除则先补充 字符再解码即可。解码是对编码的逆向操作但注意一点对于最后的两个 字符转换成两个A 字符再转成对应的两个6比特二进制0值接着转成原始字符之前需要将最后的两个6比特二进制0值丢弃因为它们实际上不携带有效信息。