0

Python

>>> print(base64.b64decode('//Py+vX7suTx8A=='))
b'\xff\xf3\xf2\xfa\xf5\xfb\xb2\xe4\xf1\xf0'

Go

>>> data, err := base64.RawStdEncoding.DecodeString("//Py+vX7suTx8A==")
err -> illegal base64 data at input byte 14

Why can Python decode this string while Go fails?

trueToastedCode
  • 175
  • 2
  • 10

1 Answers1

2

RawStdEncoding, as its name suggests, accepts "raw" base64 encoded strings. The string you used on the other hand is padded with 2 "="s. try removing them and you should get no errors:

data, err := base64.RawStdEncoding.DecodeString("//Py+vX7suTx8A") // no paddings
    if err != nil {
        fmt.Printf("err: %v\n", err)
    }

    fmt.Printf("data: %v\n", data)

And as @JimB said, if you want to decode padded strings anyway, just use base64.StdEncoding with the padded version.

data, err := base64.StdEncoding.DecodeString("//Py+vX7suTx8A==")
    if err != nil {
        fmt.Printf("err: %v\n", err)
    }

    fmt.Printf("data: %v\n", data)
Homayoon
  • 87
  • 7