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;

03-08
### Base64 编码解释 Base64 是一种基于 64 个可打印字符来表示二进制数据的编码方式。这种编码主要用于传输8Bit字节代码,在电子邮件、MIME等格式中广泛使用,以确保数据能够安全通过可能不支持所有字符集的网络协议。 ### iOS 中使用 Base64 编码的方法 在 iOS 开发环境中,苹果提供了简便的方式来进行 Base64 编码操作,不需要依赖任何外部库文件。具体来说,可以利用 `NSData` 或者 Swift 的原生类型 `Data` 来完成这项工作[^1]。 对于最新的 Swift 版本而言,可以直接调用 `Data` 对象上的方法来获取 Base64 字符串: ```swift let originalData = Data() // 这里应该是实际的数据对象 do { let base64EncodedString = try originalData.base64EncodedString() print(base64EncodedString) } catch { print(error.localizedDescription) } ``` 上述代码展示了如何将一段给定的数据转换成 Base64 编码后的字符串形式并输出到控制台。如果遇到错误,则会捕获异常并将描述信息打印出来。 ### 将文本转为 Base64 编码的具体过程 当把三个 ASCII 码值(即24位)映射至四个 Base64 字符时,每六个比特作为一个单元对应于一个特定范围内的数值,并据此查找预定义好的表格获得相应的字母或符号。例如,“Man”的ASCII码分别是77,97,110,经过计算后对应的 Base64 表达就是"TWFu"[^2]。 ### 图片转换为 Base64 编码 除了纯文本外,还可以将图像等内容转化为 Base64 格式的字符串以便嵌入网页或其他文档之中。为此目的存在一些专门设计用来处理这类需求的服务平台,比如提供的链接就可以帮助用户快速实现这一功能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值