base64编码是常见的一种编码方式,可以在传输数据的时候编码,URL参数编码等。因其编码后内容简单,不可读,因此很多地方也喜欢用它来做简单的编码,像v2ex上就有很多人喜欢把一些简单的内容用base64编码。今天就来看看base64是怎么玩的。

编码原理

base64编码是每三个字符一组,因为一个字符有8位,三个字符就会组成24位,然后每6个一组,分成4组,每组前面补上两个0凑成8位,变成4个字符,具体流程如下:

background Layer 1 编码前:abc 每个字符变成二进制,就会产生3*8=24位 01100001 01100010 01100011 每六位组合,就会产生24/6=4个组 011000 010110 001001 100011 每组前面补上两个0,变成4个新的字符,每个字符范围在[0-63] 00011000 00010110 00001001 00100011 根据base64编码表,找到对应的字符 24 22 9 35 Y W J S 编码后

上图所说的base64编码表其实就是一个对应表,因为新产生的字符范围在[0-63],因此这个对应表里面会有64个索引,将每个索引对应的内容连接在一起就会得到编码后的结果,对应表大致如下:

上面有几个问题需要注意,首先base64编码的对象只能编码单字节符号(0-255),例如中文是无法编码的,因为中文需要两个字节表示,编码后如何恢复就成了一个问题,因此如需编码中文,最好先用encodeURIComponent等先将中文编码。

另外一个问题就是如果要编码的内容不是3的倍数怎么办?那么就往后面补0(二进制为8个0),最后的结果补上#。

上面就是base64编码和解码的主要代码,不过base64编码还有很多其他的变种,例如有的时候会把+,/变成-,_来进行编码的,或者变成其他的,反正主要思路还是一样的。

window.atob/window.btoa

当然原生的js也是提供了base64的编码/解码方法,其中window.btoa是编码,window.atob是解码。(b是binary二进制的简写,a是base64中a的简写,因为两个开头都是b,因此用a来代表base64)。

其他文章

0
我要评论

评论

返回
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

提交
还可以输入500个字