Base64 encode/decode 在 golang ( appengine ) 上没有填充

Base64 encode/decode without padding on golang ( appengine )

有一种方法可以 encode/decode 字符串 to/from Base64 而不是在末尾有填充?我的意思是“==”结尾。

我正在使用 base64.URLEncoding.EncodeToString 进行编码,它工作得很好,但我没有找到决定不在末尾使用填充的方法(比如 java)。

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

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

尽管由于您使用的是应用引擎,并且暂时无法访问 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
}

简单地说,

使用 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.