背景
在重构app_url_handle的时候,有一段逻辑的数据是需要使用base64处理的,身为老鸡贼的我,本能的去看了下golang的文档,果然,用起来没有我想象的那么容易,两种语言还是有差异的,接下来我给大家举例并分析一波,以便理解。
概念
这里需要先普及一个概念和一个索引表
-
base64双向的编码/解码协议,根据一个64字符的字符集定义,RFC 4648标准化了两种字符集。默认字符集用于MIME(RFC 2045)和PEM(RFC 1421)编码;另一种用于URL和文件名,用'-'和'_'替换了'+'和'/'。
- 如图为base64的索引表
差异:
PHP实现:
实现的只是第一种常规字符集编码及MIME(RFC 2045),
如果想放在url里传输,需要自己在进行封装一层,及将标准base64中的字符`/` 、 `+` 自行转成字符`-` 、`_` 并且去除尾部的字符`=` ,具体实现文档里也指出了,如下
golang实现:
golang分别实现了标准编码和url编码,这两种分别有不同函数,直接使用即可,并且可以忽略结尾的字符`=`进行加密、解密
标准编码加密: base64.StdEncoding.EncodeToString(data)
标准编码解密: base64.StdEncoding.DecodeString(str)
url编码加密: base64.UrlEncoding.EncodeToString(data)
url编码解密: base64.UrlEncoding.DecodeString(str)
附上相关文档传送门
PHP : https://www.php.net/manual/en/function.base64-decode
Golang : https://studygolang.com/pkgdoc ( 搜下base64)
结论:
如果PHP里单纯的使用base64_encode/base64_decode函数,那么就对用golang的标准编码, 如果涉及url传输的,就用golang的url编码。