Base64

1.起因

在2021年09月10日开发功能时,对服务方返回的base64字符串进行解码,结果总是报错;

后台我在Idea控制台打印base64字符串,我发现字符串竟然换行了,然后我又把控制台打印的base64字符串复制到Idea中是,每行结尾都是\n字符,后来我上网搜了一下,发现这个换行符不应该存在于base64中;

鉴于自己知识储备不足,导致解决该问题耗费了时间,所以,特此记录一下;

2.base64组成

①大写A-Z共26个字母;

②小写a-z共26个字母;

③0-9共10个数字;

④外加2个特殊字符:“+”、“/”;

⑤等号“=”用来作为后缀用途;

加起来共64个字符;

3.base64用处

把二进制变成文本字符串;

4.base64变种

由于base64中包含【+】、【/】字符,而这2个字符在不同场景下会产生歧义,因此,针对不同的应用场景又分别研制了Base64的各种变种,为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本;(即去掉上面这2个字符)

4.1.与URL相关的变种

当base64用于URL编码时,鉴于base64里面自带的【+】、【/】,URL编码器会对这2个字符变成“%XX”形式,而在SQL中“%”是作为模糊匹配的,因此,需要在入库之前需要对“%XX”进行转换;

为了解决这种场景下的base64应用问题,而出现了针对URL编码器的base64变种:

①在末尾填充'='号;

②将标准Base64中的“+”和“/”分别改成了“-”和“_”,避免在URL编解码和数据库存储时所要作的转换;

4.2.与正则表达式相关的变种

base64里面自带的【+】、【/】在正则表达式中有特殊的含义,因此,需要有一种针对正则表达式的变种:

①将Base64的“+”和“/”改成了“!”和“-”;

4.3.其他变种

还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name);

5.base64整体逻辑

每3个8字节转换为4个6字节(3*8 = 4*6 = 24个字节);

6.规则

①把3个8字节变成4个6字节;

②每76个字符加一个换行符:\r或者\n;

③最后的结束符也要处理;

7.当字节数不被3整除时

如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉;

8.总结

①注意应该出现的64个字符,不再这里面的字符,就是base64自动添加的换行符,这些换行符有的时候需要开发者自己去掉;

②注意自己使用的是哪个变种的base64;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值