base64 编码

最近工作中对base64 多了一点感悟,于是进行了认知范围内的总结,现在记录如下,方面后期回顾:

1.为什么会有base64编码
我们知道为了让计算机能识别字符,特别是英文字符,美国人设计了Ascll码(1个字节字符集),后来各个国家基于此设计了对应自身文字的新的字符集(文字和数字之间的映射表),比如我们中国人的GB2312(中国简体字集合)。可是呢,在最初的某些应用中,比如电子邮件,它只识别Ascll码编码的字符,那么如果在其中发送中国简体,别人是无法识别的。于是引入了base64,它可以将不认识的字符转换为assll 码中的常见字符,这有点像二进制转16进制表示,看16进制数据会比2进制舒服一些。

2.base64 为什么叫这个名字?
主要是它将6个bit 看成一个单元,然后用base64码表进行转为为对应的字符,6个bit最多可以表示2的6次方个数据,也就是64个数据。看如下base64 码表:

 3. base64 码表的工作流程如下所示:


总结下就是把3个字节的二进制数据转换为4个字节数据,这4个字节的每个字节都可以用认识的字符表示。例如:将中国加油中的“中”base64 编码,怎么办呢?
(1)找到对应文字的二进制数据(可通过“汉字二进制转换器”完成,晚上很多免费的网站)
         中 >111001001011100010101101
         注:其一:可通过“汉字二进制转换器”完成,网上很多免费的网站很多。
                其二:根据不同的字符集可以获得不同的二进制数据,我们使用UTF-8可变长(1~4个字节对应一个文字)字符集,这是最常用的字符集.
(2) 把二进制数据转换为base64 下的二进制数据(按6位为一个单元,再在每个单元前面加00)。
      中 >111001001011100010101101 >00111001 00001011 00100010 00101101 > 57 11 34 45

 (3)查base64 映射表,把数字转为base64 字符
中 >111001001011100010101101 >00111001 00001011 00100010 00101101 > 57 11 34 45 >5Lit
(4) 免费“汉字转base64” 查询验证,结果是5Lit, 结果passed.

 4. 有时候字符串编码为base64字符串后,最后的==或者=是怎么回事?
答案是:==作为补位而存在的,方便后期解码是从4个字符还原为原来的三个字符。
分析过程如下:base64 是将3个字节的数据转换为4个字节的数据,比如我们知道一个英文字母按照Ascii码是占用一个字节,字符串“abc” 占用三个字符,转换的结果为:
adc >01100001 01100010 01100011 >011000 010110 001001 100011 > 00011000 00010110 00001001 00100011 >24 22 9 35 >YWJj

,然后去免费‘字符串转base64网站’确认,结果正确。

 那么假如字符串就一个字符a呢,怎么转呢?
答案是:当01不够6位数时,其前面同样添加2个0, 后面添加4个0作为补充,然后后面加两个=,凑成4个字符。
a > 01100001 > 011000 01 >00011000 00010000 > 24 16 > YQ==
然后去免费‘字符串转base64网站’确认,结果正确。

 这是结束为两个==的情况。如果某个字符占两个字节,那么base64编码后就会在最后添加一个=,作为占位符。
所以某个base64字符串结束=的数量为0,1或者是2个。

5.Java 代码实现Base64的编码和解码

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值