Base64实验工具
http://tool.chinaz.com/Tools/Base64.aspx
ascii表
https://baike.baidu.com/item/ASCII/309296?fr=aladdin
Base64表,好吧这个表没写 2进制-10进制-Base64字符,你自己计算一下
https://baike.baidu.com/item/base64/8545775?fr=aladdin
Base64百科,为什么要用Base64编码啊?应用场景是哪啊?现实需求是什么啊?
https://baike.baidu.com/item/base64/8545775?fr=aladdin
https://www.imooc.com/article/9761
前置知识
- 1个字节=8bit
- ascii表,会查ascii表
- base64表,会查base64表,注意ascii表和base64表是不同表,下面转化时会说明的
3*8=4*6
这是Base64编码的核心
百科上的例子
转码过程例子1:
// 以下例子,你可以以2进制表示为基准去推导(你看到字符都认为是2进制)
// 字符串是 “123” ,刚好三个字节=3*8=24bit
字符串: “123”
// 查ascii表,“1” => 00110001, “2” => 00110010, “3” => 00110011, 字符"1"对应00110001,字符"2"对应00110010,字符"3"对应00110011
查ascii表转2进制: 00110001 00110010 00110011
// 3*8=4*6=24bit
,将24bit分成4组
// 001100 010011 001000 110011 和 00110001 00110010 00110011 是一模一样的24bit,这里就是3*8=4*6=24bit
2进制:001100 010011 001000 110011
// 然后计算机一个字节占8位,不够就自动补两个高位0了
2进制: 00001100 00010011 00001000 00110011
// 上面就高位补0后,从46=24bit 变成 48=32bit,数据量变大了
// 00001100=>12=>M , 00010011=>19=>T, 00001000=>8=>I, 00110011=>51=>z
查base64表转字符: “MTIz”
所以字符串"123" 经过Base64编码后就是字符串 “MTIz” ,找个工具验证一下
转码过程例子2:
// 那么一开始要Base64编码的字符串不够3字节呢?这个例子2字节
// 如果剩下的字符不足3个字节,则用0填充,输出字符使用‘=’,因此编码后输出的文本末尾可能会出现1或2个‘=’
字符串 “12”
查ascii表转2进制:00110001 00110010
//高位补0,不足填充0
// 001100=>00001100, 010011=>00010011, 0010=>00001000
补0填充0后:00001100 00010011 00001000
// 00001100=>12=>M, 00010011=>19=>T, 00001000=>8=>I
查base64表转字符: MTI
// MTI还差1个字符才组成4个字符啊,那就用"=",这里就补1个"="
最后base64编码:MTI=
所以字符串"12" 经过Base64编码后就是字符串 “MTI=” ,找个工具验证一下
转码过程例子3:
// 那么一开始要Base64编码的字符串不够3字节呢?这个例子1字节
// 如果剩下的字符不足3个字节,则用0填充,输出字符使用‘=’,因此编码后输出的文本末尾可能会出现1或2个‘=’
字符串 “1”
查ascii表转2进制:00110001
// 00110001 怎么补0呢? 00110001分成 001100 和 01,然后高位补0,不足填充0
// 001100=>00001100, 01=>0001=>00010000
补0填充0后: 00001100 00010000
// 00001100=>12=>M, 00010000=>16=>Q
查base64表转字符: MQ
// MQ还差2个字符才组成4个字符啊,那就用"=",这里就补2个"="
最后base64编码:MQ==
所以字符串"1" 经过Base64编码后就是字符串 “MQ==” ,找个工具验证一下