有没有一种方法可以将字符串编码/解码为Base64而不需要在结尾添加填充?我的意思是指“==”结尾。
我正在使用base64.URLEncoding.EncodeToString
进行编码,它完美地工作,但我没发现有办法决定不使用结尾的填充(就像Java中的情况)。
有没有一种方法可以将字符串编码/解码为Base64而不需要在结尾添加填充?我的意思是指“==”结尾。
我正在使用base64.URLEncoding.EncodeToString
进行编码,它完美地工作,但我没发现有办法决定不使用结尾的填充(就像Java中的情况)。
Go1.5将在Encoding
中添加一个WithPadding
选项。
这还将添加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
}
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.
value := base64.RawURLEncoding.EncodeToString(bytes)
进行编码:
str := "encode this"
encodedStr := base64.StdEncoding.
WithPadding(base64.NoPadding).
EncodeToString([]byte(str))
fmt.Println(encodedStr)
解码:
data, err := base64.
StdEncoding.WithPadding(base64.NoPadding).
DecodeString(encodedStr)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(data))
Go Playground: https://go.dev/play/p/TAZgLMSSe-K
Go Playground:https://go.dev/play/p/TAZgLMSSe-K
base64.RawURLEncoding.DecodeString(strings.TrimRight(encryptedPrice, "="))
。 - Sergey Ponomarev