Base64系列编码格式

Base64系列编码格式

参考:

为什么要使用base64编码,有哪些情景需求?

RFC4648

RFC2045

​ Base64系列包含Base 64 Encoding、Base 64 Encoding with URL and Filename Safe Alphabet、Base 32 Encoding、Base 32 Encoding with Extended Hex Alphabet、Base 16 Encoding、MIME version(Header Field)六个版本,他们的编码区别并不大,下文只会明细Base 64 Encoding的编码方式和其他与其的不同。Base64系列编码格式的用途主要如下:

  1. 获得字符处理最大兼容性。不同硬件和规范的要求下,对部分相同字符的进制定义、使用敏感(如url不能出现字符’')等方面都限制原文本的数据传输的表达含义一致性,通过编码为通用的US-ASCII子字母集,能有效规避限制。
  2. 进制流编译字符流处理。由于协议封装等结果,数据传输不能直接应用二进制流,而只能支持文本字符,Base64编码进制流为字符流,规避“过度包装”的影响。如http的url中只用ASCII字符。
  3. 不可见字符可视化。不可见字符包含换行符\r、\n、\t等,这些不便于ctr+c、ctrl+v等操作,Base64将其可视化,方便操作。

注:Base64规范本身不具有加密解密意图,但可以通过将显式的字母表变为隐式的字符目标——将字母表打乱或替换——来使Base64编码具有加密属性。字母表类似于密码本。

Base64

字母表:[A-Za-z0-9+/],字符的标识为其索引,索引二进制数表示,如A-00_0000,/-11_1111。

编码格式:获取3个8-bit group,分解成4个6-bit group,每个6-bit group占1个byte。

补位与填充:mode = total byte nums % 3在[0, 3)区间,其中mode = 1, 2时需要补位和填充。mode=1时,第2个6-bit缺4bits,低位补位0,后续2个6-bit group用’=‘的ASCII码填充;mode=2时,第3个6-bit缺2bits,低位补位0,后续1个6-bit group用’='的ASCII码填充。

有效位比:4:3

Base 64 Encoding with URL and Filename Safe Alphabet

字母表:[A-Za-z0-9-_]。

Base 32 Encoding

字母表:[A-Z2-7]。

编码格式:获取5个8-bit group,分解成8个5-bit group。

有效位比:5:8

Base 32 Encoding with Extended Hex Alphabet

字母表:[0-9A-V]

编码格式:同Base 32 Encoding

Base 16 Encoding

字母表:[0-9A-F]

编码格式:获取1个8-bit group,分解成2个4-bit group。

补位与填充:无。

示例

​ Base64中字符’f’的编码:f - 0110_0110 → Zg== - 011001_100000_=_=,=没有对应的index标识。在JAVA的实现中,每个bit group都占1个byte,'='也占1个byte。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值