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

for*_*ayo 4 java google-app-engine go

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

我正在使用"base64.URLEncoding.EncodeToString"进行编码,它完美地工作但我没有看到决定不在末尾使用填充的方法(就像在java上).

问候.

Jim*_*imB 9

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
}
Run Code Online (Sandbox Code Playgroud)


Som*_* S. 9

简单地,

使用base64.RawStdEncoding.EncodeToString而不是base64.StdEncoding.EncodeToString

要不然

使用base64.RawURLEncoding.EncodeToString而不是base64.URLEncoding.EncodeToString.

参考:参见源代码注释第94行到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.
Run Code Online (Sandbox Code Playgroud)