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

时间:2015-08-12 17:19:59

标签: java google-app-engine go

有一种方法可以将字符串编码/解码到Base64,而不需要在底部填充?我的意思是' =='结束。

我正在使用" base64.URLEncoding.EncodeToString"编码,它的工作完美,但我没有看到一种方法决定不在最后使用填充(如在java上)。

问候。

2 个答案:

答案 0 :(得分:8)

Go1.5在Encoding上会有WithPadding个选项。

这也将添加2个预定义的编码,RawStdEncoding, and 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
}

答案 1 :(得分:0)

简单

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

否则

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

Reference: see source-code comments Line 94 to 110

// 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.