20210326关于base64的网络传输与非网络传输等问题 - ziyouzy/2021blog GitHub Wiki

具体可看百度知道:
https://baike.baidu.com/item/base64/8545775?fr=aladdin
以及纯粹的base64的知识体系:
https://blog.csdn.net/neweastsun/article/details/106815434

golang已经为其设计好了对应的工具:
URL和文件名安全方式是标准方式的变体,其输出用于URL和文件名。
因为+和/字符是标准Base64字符对URL和文件名编码不安全,
变体即使用-代替+,_(下划线)代替/。

编码示例:

func encode() {
data := "hello world12345!?$*&()'-@~"

// Base64 Url Encoding
uEnc := base64.URLEncoding.EncodeToString([]byte(data))
fmt.Println(uEnc) // aGVsbG8gd29ybGQxMjM0NSE_JComKCknLUB-
}

base64其实只是使用到了64个标准字符
其中包含所涉及问题的如下两个字符:

+
/

通过http协议、url相关的传输才会遇到问题,如果直接是tcp,udp的方式传输则不会遇到问题:

然而,标准的Base64并不适合直接放在URL里传输,
因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,
而这些“%”号在存入数据库时还需要再进行转换,
因为ANSI SQL中已将“%”号用作通配符。

为解决此问题,可采用一种用于URL的改进Base64编码,
它不仅在末尾去掉填充的'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,
这样就免去了在URL编解码和数据库存储时所要作的转换,
避免了编码信息长度在此过程中的增加,
并统一了数据库、表单等处对象标识符的格式。

未完。。。

其实目前的需求并不涉及到相关问题,而且就算涉及到相关问题,他也并不属于authcode的问题,应该将这道转换工序进行解耦