Base64编码

发布于 2023-11-29  509 次阅读


1.什么是base64?

Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于 2^6=64,所以每 6 个比特为一个单元,对应某个可打印字符。3 个字节有 24 个比特,对应于 4 个 Base64 单元,即 3 个字节可由 4 个可打印字符来表示。
——维基百科

它不是一种加解密技术,是一种简单的编解码技术。

Base64 常用于表示、传输、存储二进制数据,也可以用于将一些含有特殊字符的文本内容编码,以便传输。

比如:

  1. 在电子邮件的传输中,Base64 可以用来将 binary 的字节序列,比如附件,编码成 ASCII 字节序列;
  2. 将一些体积不大的图片 Base64 编码后,直接内嵌到网页源码里;
  3. 将要传递给 HTTP 请求的参数做简单的转换,降低肉眼可读性;
    注:用于 URL 的 Base64 非标准 Base64,是一种变种。
  4. 网友们在论坛等公开场合习惯将邮箱地址 Base64 后再发出来,防止被爬虫抓取后发送垃圾邮件。

3.为什么叫base64

​ 因为它是基于(Base)64个字符的一种编码方式。使用其编码后的文本只包含64个ASCII码字符(偶尔加一个填充字符=),如下所示:

Base64使用到的64个字符:

  • A-Z 26个
  • a-z 26个
  • 0-9 10个
  • + 1个

4. Base64 编码原理

标准 Base64 里的 64 个可打印字符是 A-Za-z0-9+/,分别依次对应索引值 0-63。索引表如下:

img

编码时,每 3 个字节一组,共 8bit*3=24bit,划分成 4 组,即每 6bit 代表一个编码后的索引值,划分如下图所示:

img

这样可能不太直观,举个例子就容易理解了。比如我们对 cat 进行编码:

img

可以看到 cat 编码后变成了 Y2F0

如果待编码内容的字节数不是 3 的整数倍,那需要进行一些额外的处理。

如果最后剩下 1 个字节,那么将补 4 个 0 位,编码成 2 个 Base64 字符,然后补两个 =

img

如果最后剩下 2 个字节,那么将补 2 个 0 位,编码成 3 个 Base64 字符,然后补一个 =

img

5. 实现一个简易的 Base64 编码器

以下是使用python3版本利用base64库写的base64内容转换脚本


import base64

#将内容转为base64格式内容
def convertToBase64(info):
    try:
        tmpBytes=info.encode()
        tmpBase64=base64.b64encode(tmpBytes)
        return tmpBase64
    except Exception as e:
        print('异常:',e)

#将base64格式内容转为正常信息
def convertTostring(base64Info):
    try:
        tmpBytes=base64.b64decode(base64Info)
        tmpStr=tmpBytes.decode()
        return tmpStr
    except Exception as e:
        print('异常:',e)

下次见面会是什么时候呢?
最后更新于 2023-11-29