base64 编解码及使用
前言
大部分寻找 base64,只是为了使用而已,所以先说如何使用。
不用寻找相关的 base64 库,不用自己处理编解码,直接调用浏览器自身 API。既然减少完全不必要加载的 js 文件。
应用
-
Base64 解码
window.atob
例如:
window.atob('aGVsbG8gd29yZA==')
"hello word"
-
Base64 编码
window.btoa
例如:
window.btoa('hello word')
"aGVsbG8gd29yZA=="
就是这么简单!
兼容性: IE10+ 以后所有现代浏览器都支持,所以放弃 IE 吧!同时,不支持Unicode字符的编码, 需配合encodeURIComponent、decodeURIComponent来使用。
这是一条迷人的分割线
base64 是什么?
引用百度百科的话:
Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法。可查看 RFC2045 ~ RFC2049,上面有 MIME 的详细规范。
Base64 编码是从二进制到字符的过程,可用于在 HTTP 环境下传递较长的标识信息。采用 Base64 编码具有不可读性,需要解码后才能阅读。
有点拗口,即 base 是一种编码方式,不是加密,不是加密,不是加密。
白话:选出 64 个字符集(实际上 65 个, A-Z,a-z,0-9,+,/,再加垫字符 = ),并将内容按照一定的规则转换成字符集的字符。
索引表:
64 个 字符
A~Z -> 0~25
a~z -> 26~51
0~9 -> 52~61
+ -> 62
- -> 63
编码规则:
-
每三个字节为一组,一共是 24 个二进制位。
-
将 24 个二进制位分为四小组,每小组 6 个二进制位。
-
在每小组前面加上 00,构成 32 为二进制,即 4 个字节。
例如:
"Cat"
C ASCII 十进制:67 二进制:0100 0011
a ASCII 十进制:97 二进制:0110 0001
t ASCII 十进制:116 二进制:0111 0100
合起来为:0100 0011 0110 0001 0111 0100
分为四组:010000 110110 000101 110100
添加前缀:00010000 00110110 00000101 00110100
对应的十进制值为:16 54 5 54
对应上面的索引表:Q2F0
-
字节数不足 3 的情况:
-
2 个字节的情况:
2 个字节的一共 16 个二进制位,按照上面的规则,转成三组,分别为6,6,4,最后一组除了前面加两个 0 以外,后面也要加两个 0。这样得到一个三位的 Base64 编码,同时在末尾补上一个"="号。
'Hi' H ASCII 十进制:72 二进制:0100 1000 i ASCII 十进制:105 二进制:0110 1001 即:0100 1000 0110 1001 拆:010010 000110 1001 补:00010010 00000110 00100100 组:18 6 36 对应索引:SGk=
-
1 个字节的情况:
将8位二进制,分为2组,6和2,最后一组2为,前面补两个0,后面补4个0。构成16位两个字节, 并在末尾补上两个==号。
'H' H ASCII 十进制:72 二进制:0100 1000 拆:010010 00 补:00010010 00000000 组:18 0 对应索引:SA==
-
其他字符自询搜索 ASCII 表
解码
解码其实就是一个逆推的过程。
-
每4个字符为一组,查找字符其索引值。
-
将其索引值,转为二进制,并将每个二进制前面的00去掉
-
将剩下的24位二进制转为分为3份,组成3个字节
-
查找ASCII表,组成字符串。