用记事本打开
exe
、jpg
、
一、Base64是什么
Base64是一种用64个字符来表示任意二进制数据的方法。
二、Base64编码与解码
-
所有的数据都能被编码为只用64+1个字符就能表示的文本
64个字符指的是将
[A-Za-z0-9+/]
依次排序,以0-63为其序号
base64对照表.png
1个字符指的是=
号,其作用是补位用的。 -
Base64编码
其技术原理呢是将数据转化为二进制,每3个字节一组,1字节=8bit,那么一共是
3x8=24
bit,将最大的序列号63转化为二进制是111111
,刚好6个bit,正好划为4组:
这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。
Base64编码会把3字节的二进制数据编码为4字节的文本数据,虽然长度增加33%,但是编码后的文本数据可以在邮件正文、网页等直接显示。
但是有一个问题来了,如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?
这时候“1”字符的作用就体现出来了,Base64用\x00
字节(二进制00000000)在末尾补足后,再在编码的末尾加上1个或2个=
号,表示补了多少字节,解码的时候,会自动去掉。 -
Base64解码
将上面的倒着解回去就行了
最新的浏览器提供了自动生成base64的方法atob
和btob
btoa('a123')
// => "YTEyMw=="
atob('YTEyMw==')
// => "a123"
三、Base64的应用
-
密钥
对证书来说,特别是根证书,一般都是作Base64编码的,因为它要在网上被许多人下载。电子邮件的附件一般也作Base64编码的,因为一个附件数据往往是有不可见字符的。 -
密文
Base64经常用于一些JS加密,有些JS生成的cookie就是经过Base64编码的,有些JS生成返回的数据也是Base64。 -
图片
直接上例子:
抓百度网盘标题的时候,发现标题是图片,直接审查元素,发现是BASE64生成的
标题
base64生成
-
普通数据
有些把账号密码拿去Base64编码,虽然没什么用,懂得人一眼就能看出来,但是编码后的数据,还是会造成一些干扰,对不懂的人更会造成极大困惑。