Base64编码原理解析

网上关于Base64编解码原理的资料已经很多了,这里只是自己梳理一下知识点而已。如有不确,望批评指正。

概念:

Bas64编码顾名思义,就是用64个可显示字符来显示二进制的编码方式。64个字符正好需要6个bit位来编码,也就是说Base64每6bit作为一个单元。4*6=24个bit正好是3个byte。所以,Base64都是每3个字符进行编码最终结果为4个可显示Base64字符。当需要编码的字符不能被3整除时,用 0 来填充,每填充 00 ,则最终结果就会加一个 =  ( 其中 = 号只是一个编码后缀不属于64个可显示字符)。

Base64编码表对应的64个字符包括:0-25->A-Z;26-51->a-z ;52-61->0-9;62为 +;63为 \ 。如下:

Base64 编码表
Value Char
Value Char
Value Char
Value Char
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

原理:

(一)编码

取字符ASCII的十进制表示(每3个字符为一组),然后将十进制转化为二进制。从左边开始每6个bit组成一个新的单元(连续4个单元组成新的一组,共24bit),不够的用0补齐。每6bit转化为一个十进制,查找Base64编码表,找到相对应的字符。组合到一块完成编码。编码过程中末尾每加2个0则最后Base64编码加一个 = 。

(二)解码

解码是编码的反向操作,先根据字符在Base64编码表找到对应的十进制数。将十进制数转化为二进制表示,源编码后面若有一个 =,则在二进制后面去掉 00 ;若编码后面有两个 = ,则在二进制后面去掉两个 00 。然后从左往右每8个bit组成一个新的byte,将其转化成十进制数。最后,根据该十进制数查看ASCII编码表,找到对应的字符,完成解码。

下面举例说明:

Base64编码:

1)字符个数为3个整数倍。例如:”RFC“


字符RF
ASCII十进制827067
8bit010100100100 01100100 0011
6bit010100100100011001000011
十进制2036253
Base64UkZD


2)字符个数被3除余数为1。例如:”Base“

字符 Base

ASCII中的十进制表示6697 115  101

8bit表示  0100 0010 0110 00010111 00110110 0101

6bit表示  010000 100110  000101 110011  011001 010000 (注:此处补了4个0)

十进制表示  16 38 55125 16

Base64编码  Q m FzZ Q  = =

3)字符个数被3除余数为2。例如:”Basee“

字符 Bas e  e

ASCII中的十进制表示6697 115  101 101

8bit表示  0100 0010 0110 00010111 00110110 01010110 0101

6bit表示  010000 100110  000101 110011  011001 010110  010100 (注:此处补了2个0)

十进制表示  16 38 55125 22  20

Base64编码  Q m FzZ W  U =

Base64解码:

      1)编码不带 = 号。例如:“UkZD”

Base64编码Uk Z  D

十进制表示2036 25  3

6bit表示010100100100011001000011

8bit表示0101 00100100 01100100 0011

ASCII十进制表示8270 67

字符 RF C   

      2)编码带有一个 = 号。例如:“QmFzZWU=

Base64编码Qm F  z ZWU =

十进制表示1638 5  51 252220

6bit表示010000100110000101110011011001010110010100

8bit表示0100 00100110 00010111 00110110 01010110 0101

ASCII十进制表示6697 115  101 101

字符Ba s  e  e

      3)编码带有两个 = 号。例如:“QmFzZQ==

Base64编码QmFzZQ==

十进制表示16385512516

6bit表示010000100110000101110011011001010000

8bit表示0100 00100110 00010111 00110110 0101

ASCII十进制表示6697115101

字符Base

注:等号只是编码后缀,它是不算在编码里面的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值