格式转换 - Base64算法

简介

  • Base64算法的作用:将二进制数据转换成可见字符串。

由来

  • 一些场景下使用二进制数据非常不方便,如下:
  1. 一些字符协议(http协议等),协议内容都是字符串,数据接收处理也是按照字符串形式,如需传输二进制数据比较困难,强制按字符串形式处理,由于不可见字符以及控制字符的存在,容易出现问题。
  2. 一些特殊应用,例如:配置存储,用户需要查看/编辑数据,如需存储二进制数据(秘钥等)非常不方便。
  • 因此需要一种算法将二进制数据转换成可见字符。

算法处理

  1. 编码,将二进制数据转换成可见字符串
  2. 解码,将可见字符串转换成二进制数据

实现原理

  • ASCII码表中可见字符数量多于2的6次方,少于2的7次方,因此Base64算法选取64(2的6次方)个可见字符,组成数据转换表,采用查表法,将二进制数据的每6 bits转换为一个可见字符(8 bits)。

填充(padding)

  • Base64算法的操作单元是6 bits,1个字节有8 bits,因此如果原始数据bit 数量是24(8和6的公倍数)的倍数,即3个字节,则不需要padding,否则就需要填充字节0,直至是3的倍数,填充了几个字节,转换后的字符就加几个‘=’,因此编码后输出的文本末尾可能会出现1或2个’='。
  • 例子:
1. 字节数组: ABCDEFG   
按3字节分组:[ABC] [DEF] [G] (需要填充两个字节0)
结果将是: [QUJD] [REVG] [Rw==] (编码结果加两个=符号)
2. 字节数组: ABCDEFGH   
按3字节分组:[ABC] [DEF] [GH] (需要填充一个字节0)
结果将是:[QUJD] [REVG] [R0g=] (编码结果加一个=符号)
  • 注意:填充的处理规则需要注意,补充缺少的位后的多余填充数据不做编码。

标准码表

  • 标准码表的大小为2^6=64,这也是Base64名称的由来。
码值字符码值字符码值字符码值字符
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

安全性

  • 由于编码过程,原始数据经过一次转换,base64具有一定的安全性,但是由于标准码表是公开的,其安全性是非常低的。
  • 自定义转换表是增强Base64算法安全性的常见做法。

自定义转换表

  • 常见做法如下:
  1. 打乱标准表中字符顺序
  2. 使用其它可见字符替换标准表中部分字符
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值