Golang & PHP 针对base64的差异

背景

在重构app_url_handle的时候,有一段逻辑的数据是需要使用base64处理的,身为老鸡贼的我,本能的去看了下golang的文档,果然,用起来没有我想象的那么容易,两种语言还是有差异的,接下来我给大家举例并分析一波,以便理解。

概念

这里需要先普及一个概念和一个索引表

  1. base64双向的编码/解码协议,根据一个64字符的字符集定义,RFC 4648标准化了两种字符集。默认字符集用于MIME(RFC 2045)和PEM(RFC 1421)编码;另一种用于URL和文件名,用'-'和'_'替换了'+'和'/'。

  2. 如图为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编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值