为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang ( appengine ) 上没有填充的 Base64 编码/解码

在 golang ( appengine ) 上没有填充的 Base64 编码/解码

Go
幕布斯7119047 2021-11-01 14:14:33
有没有一种方法可以将字符串编码/解码为 Base64 或从 Base64 编码/解码字符串而无需在末尾填充?我的意思是“==”结尾。我正在使用base64.URLEncoding.EncodeToString编码并且它完美地工作,但我没有看到决定在最后不使用填充的方法(就像在 java 上一样)。
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

Go1.5 将有一个WithPadding选项Encoding。


这还将添加 2 个预定义的编码RawStdEncoding, 和RawURLEncoding,它们将没有填充。


虽然由于您使用的是 app-engine,并且暂时无法访问 Go1.5,但您可以创建一些辅助函数来根据需要添加和删除填充。


这是一个编码和解码字符串的示例。如果您需要,它可以很容易地适应以更有效地使用[]byte.


func base64EncodeStripped(s string) string {

    encoded := base64.StdEncoding.EncodeToString([]byte(s))

    return strings.TrimRight(encoded, "=")

}


func base64DecodeStripped(s string) (string, error) {

    if i := len(s) % 4; i != 0 {

        s += strings.Repeat("=", 4-i)

    }

    decoded, err := base64.StdEncoding.DecodeString(s)

    return string(decoded), err

}


查看完整回答
反对 回复 2021-11-01
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

简单地,


使用base64.RawStdEncoding.EncodeToString代替base64.StdEncoding.EncodeToString


要不然


使用base64.RawURLEncoding.EncodeToString代替base64.URLEncoding.EncodeToString.


// RawURLEncoding is the unpadded alternate base64 encoding defined in RFC 4648.

// It is typically used in URLs and file names.

// This is the same as URLEncoding but omits padding characters.


查看完整回答
反对 回复 2021-11-01
  • 2 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信