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编码,虽然没什么用,懂得人一眼就能看出来,但是编码后的数据,还是会造成一些干扰,对不懂的人更会造成极大困惑。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 每个文本编辑器都有默认的编码方式(比如 UTF-8 编码),当我们保存文档的时候,可以选择编码方式,如果没有特意选...
    _于曼丽_阅读 1,610评论 0 1
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,495评论 0 9
  • CTF中那些脑洞大开的编码和加密 0x00 前言 正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到类似这样的问...
    查无此人asdasd阅读 6,158评论 0 19
  • 经年故纸遗长恨,转眼成非 ,转眼成非,昨日深红已半飞。 丝弦和尽黄昏雨,一缕相催,一缕相催 ,渐有心思散作灰。
    baobei朵朵阅读 287评论 0 0
  • 今天中午天阴沉沉的。日跟进也已完成,坐着无趣,就想给自己找点事儿干。这几天缺水上火,嘴上都起泡了。出门吧,...
    人淡如菊chen阅读 2,580评论 0 4