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.
有一种方法可以 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.