07 基础篇-Base64

用记事本打开exejpgpdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。

一、Base64是什么

Base64是一种用64个字符来表示任意二进制数据的方法。

二、Base64编码与解码

  • 所有的数据都能被编码为只用64+1个字符就能表示的文本

    64个字符指的是将[A-Za-z0-9+/]依次排序,以0-63为其序号

    base64对照表.png

    1个字符指的是=号,其作用是补位用的。

  • Base64编码

    其技术原理呢是将数据转化为二进制,每3个字节一组,1字节=8bit,那么一共是3x8=24bit,将最大的序列号63转化为二进制是111111,刚好6个bit,正好划为4组:


    这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。
    Base64编码会把3字节的二进制数据编码为4字节的文本数据,虽然长度增加33%,但是编码后的文本数据可以在邮件正文、网页等直接显示。
    但是有一个问题来了,如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?
    这时候“1”字符的作用就体现出来了,Base64用\x00字节(二进制00000000)在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

  • Base64解码

将上面的倒着解回去就行了
最新的浏览器提供了自动生成base64的方法atobbtob

btoa('a123')
// => "YTEyMw=="
atob('YTEyMw==')
// => "a123"

三、Base64的应用

  • 密钥
    对证书来说,特别是根证书,一般都是作Base64编码的,因为它要在网上被许多人下载。电子邮件的附件一般也作Base64编码的,因为一个附件数据往往是有不可见字符的。
  • 密文
    Base64经常用于一些JS加密,有些JS生成的cookie就是经过Base64编码的,有些JS生成返回的数据也是Base64。
  • 图片

    直接上例子:
    抓百度网盘标题的时候,发现标题是图片,直接审查元素,发现是BASE64生成的


    标题

    base64生成
  • 普通数据
    有些把账号密码拿去Base64编码,虽然没什么用,懂得人一眼就能看出来,但是编码后的数据,还是会造成一些干扰,对不懂的人更会造成极大困惑。

你可能感兴趣的:(07 基础篇-Base64)