Solución:
Go1.5 tendrá un WithPadding
opción en Encoding
.
Esto también agregará 2 codificaciones predefinidas, RawStdEncoding
, y RawURLEncoding
, que no tendrá relleno.
Sin embargo, dado que está en el motor de la aplicación y no tendrá acceso a Go1.5 por un tiempo, puede hacer alguna función auxiliar para agregar y eliminar el relleno según sea necesario.
Aquí hay un ejemplo para codificar y decodificar cadenas. Si lo necesita, podría adaptarse fácilmente para que funcione de manera más eficiente utilizando []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
}
Simplemente,
usar base64.RawStdEncoding.EncodeToString
en lugar de base64.StdEncoding.EncodeToString
Si no
usar base64.RawURLEncoding.EncodeToString
en lugar de base64.URLEncoding.EncodeToString
.
Referencia: consulte los comentarios del código fuente, línea 94 a 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.