对象base64转码_什么是 Base64 编码

本文详细介绍了Base64编码的概念,包括它的作用、编码表、解码规则和实际应用。提供了C语言的Base64编码和解码函数实现,并给出了Python中使用base64模块进行编码和解码的示例。
摘要由CSDN通过智能技术生成

什么是 Base64

Base64 是二进制到字符编码的一种方案,将二进制数据使用 ASCII 字符串格式表示,即翻译为基数为 64 的一种表示。每个 Base64 数字表示一个 6 比特的数据。三个字节(共 24 个比特)因此可以被表示为 4 个 Base64 数字。

Base64 常用于处理文本数据的场合,表示、传输、存储一些二进制数据。

Base64 编码表

从 0 到 25 ,也就是从 000000 到 011001,是 ASCII 字符 A - Z

从 26 到 51,也就是从 011010 到 110011,是 ASCII 字符 a - z

从 52 到 61,也就是从 110100 到 111101,是 ASCII 字符 0 - 9

62 (111110)是 ASCII 字符 +

63 (111111)是 ASCII 字符 /

缀词(padding) =

因为 Base64 是每 6 个比特进行一次编码,而现代电脑上的编码值被分为了一个个 8 比特的字节,因此,在 Base64 编码的文本中,每 4 个字符表示三个字节的未编码的文本或数据。这就意味着,当未编码的输入的字节数不是 3 的倍数时,编码输出必须加上缀词来使得输出的长度是 4 的倍数。这个缀词便是 = ,它表明:不再需要更多的比特来进行解码。

= 数量规则如下:若源数据的字节数是 3 的倍数,则不需要加 =

若源数据的字节数除 3 余 1,则加两个 =

若源数据的字节数除 3 余 2,则加一个 =

举个例子来说明 = 的使用:

字符串 "Man" 的 ASCII 编码是 01001101 ,01100001 ,01101110 ,(0x4d,0x61,0x6e)。拆成六个一组,就是 010011 ,010110 ,000101 ,101110 。对应于 Base64 编码表中的 T,W,F,u,故编码后 ASCII 编码的"Man" 对应于 "TWFu"。

字符串 "Ma" 的 ASCII 是 01001101 ,01100001 。拆开得到 010011 ,010110 ,0001 。最后一组还少两个比特,补零得到 000100 。对应于 Base64 编码得到 T,W,E,编码结果为 "TWE="。此处的 = 表明补了两个比特。

字符串 "M" 的 ASCII 是 01001101 ,拆开之,得到 010011 ,01 。最后一组要补四个零,得到 010000 。对应 Base64 得到 T,Q。编码结果为 "TQ==",== 表明补了四个比特。

实际上,缀词 = 并不是必须的,因为缺少的字节可以从编码文本的长度中计算得到。例如 “YW55IGNhcm5hbCBwbGVhc3VyZS4” 这个编码串共有 27 个字符,不是 4 的倍数, 且由 mod(27, 4) = 1 可知它补充了两个比特。通过这些信息就可以知道源文本(或数据)(若为 ASCII 编码)是 “any carnal pleasure.”。但是,如果多个 Base64 编码字符串被连接在一起,= 是必要的,因为需要使用它来区分不同来源的字符串。

Base64 的解码

当对 Base64 进行解码时,四个字符通常会被转化为三个字节。当存在缀词时则可能是两个或一个,一个 = 表明四个字符会被转化为两个字节,两个 = 表明四字符会被转为一个字节。上面的例子便是如此。

如果没有缀词,在对所有的四字符组进行转码后,若还有剩下的字符,剩下的字符数一定小于四。这种情况下,只可能剩下两个或三个字符。若剩下两个字符,则转为一个字节,若为三个则转为两个字节。

一个简单的 C 实现

以下代码在 MINGW 下通过编译并通过了下面的测试。

简便起见,我没用使用 stdint 头文件,所有下面的代码想要正确运行的话,必须满足 int 是 32 位。

编码

要想将一个个字节编码为 Base64,首先需要一张二进制码(000000 - 111111)到 64 个字符的映射表:

char base64_encod

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值