base64编解码即使用

base64 编解码及使用

前言

大部分寻找 base64,只是为了使用而已,所以先说如何使用。
不用寻找相关的 base64 库,不用自己处理编解码,直接调用浏览器自身 API。既然减少完全不必要加载的 js 文件。

应用

  1. Base64 解码

    window.atob

例如:

window.atob('aGVsbG8gd29yZA==')
"hello word"
  1. 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

编码规则:

  1. 每三个字节为一组,一共是 24 个二进制位。

  2. 将 24 个二进制位分为四小组,每小组 6 个二进制位。

  3. 在每小组前面加上 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 表

解码

解码其实就是一个逆推的过程。

  1. 每4个字符为一组,查找字符其索引值。

  2. 将其索引值,转为二进制,并将每个二进制前面的00去掉

  3. 将剩下的24位二进制转为分为3份,组成3个字节

  4. 查找ASCII表,组成字符串。

posted @ 2021-06-08 22:19  志在指尖  阅读(553)  评论(0编辑  收藏  举报