Base64编码与解码

Posted by Dugreen on January 29, 2018

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,需要解码后才能阅读。

以上内容源于百度百科

前两天在折腾翻墙,在配置ss的相关内容时遇到了不少的问题。基于qt开发的ss客户图形端存在很多的问题。ss的url无法直接配置,于是开始尝试解码ss的url(ss://YWVzLTI1Ni1jZmI6dTFyUldUc3NOdjBw@198.199.101.152:8388).

其中YWVzLTI1Ni1jZmI6dTFyUldUc3NOdjBw就是我想要获取的传输加密方式以及密码。(当时直接在线进行的解码,后来彻底看了base64相关的内容,深入学习了一下)

Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个>字节的形式。如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’。

base64编码

就比如这句:i love you.前三个八位是i l,接下来我来对他进行编码。

i l(包含空格)
转ascii的二进制-> 01101001 00100000 01101100 
转6位-> 011010 010010 000001 101100
拼成4个8位> 00011010 00010010 00000001 00101100
转十进制> 26 18 1 44 
根据base64编码表(看下文)编码> a S B s
i l -> aSBs

base64解码

解码我的我的ss配置YWVzLTI1Ni1jZmI6dTFyUldUc3NOdjBw,用YWVz来进行演示。

YWVz
据base64编码表解码成十进制数字-> 24 22 21 51
转成4个8位-> 00011000 00010110 00010101 00110011
剪切成4个6位-> 011000 010110 010101 110011
转成3个8位-> 01100001 01100101 01110011
转字符-> a e s

base64编码表