Ce face encoding/base64.Encoding.DecodeString
base64.StdEncoding.DecodeString(s) returnează octeții originali. Trebuie să folosești aceeași codare ca la codare: un text URL (cu - și _) nu se decodează cu StdEncoding, iar un text fără = are nevoie de varianta Raw.
Pentru caractere invalide sau lungime greșită, eroarea este de tip base64.CorruptInputError și conține poziția primei probleme. Spațiile și rândurile noi (\r, \n) sunt ignorate.
Parametri
| Parametru | Descriere |
|---|---|
s |
Textul Base64. |
Ce returnează
Octeții decodați și o eroare.
Exemple
Exemplul 1: Decodare și verificarea erorilor
package main
import (
"encoding/base64"
"fmt"
)
func main() {
date, err := base64.StdEncoding.DecodeString("QnVuxIMgeml1YSwgSWHImWkh")
fmt.Println(string(date), err)
_, err = base64.StdEncoding.DecodeString("SWHImWk/Pj4=")
fmt.Println("Std pe text Std:", err)
_, err = base64.StdEncoding.DecodeString("SWHImWk_Pj4=")
fmt.Println("Std pe text URL:", err)
d, err := base64.URLEncoding.DecodeString("SWHImWk_Pj4=")
fmt.Println("URL pe text URL:", string(d), err)
_, err = base64.StdEncoding.DecodeString("SWHImWk/Pj4")
fmt.Println("Std fără =: ", err)
d, err = base64.RawStdEncoding.DecodeString("SWHImWk/Pj4")
fmt.Println("RawStd fără =: ", string(d), err)
}
Rezultat
Bună ziua, Iași! <nil>
Std pe text Std: <nil>
Std pe text URL: illegal base64 data at input byte 7
URL pe text URL: Iași?>> <nil>
Std fără =: illegal base64 data at input byte 8
RawStd fără =: Iași?>> <nil>
Exemplul 2: Partea din mijloc a unui token JWT
Un JWT are trei părți separate prin punct, codate cu RawURLEncoding. A doua parte conține datele (claims) în JSON.
package main
import (
"encoding/base64"
"fmt"
"strings"
)
func main() {
token := "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYW5hIiwicm9sIjoiYWRtaW4iLCJleHAiOjE3OTI0OTc2MDB9.semnatura"
parti := strings.Split(token, ".")
date, err := base64.RawURLEncoding.DecodeString(parti[1])
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Date din token:", string(date))
}
Rezultat
Date din token: {"user":"ana","rol":"admin","exp":1792497600}
Greșeli frecvente
- Decodezi cu altă codare decât cea folosită la codare și primești
illegal base64 data at input byte N. Verifică dacă textul are-_(URL) și dacă se termină cu=. - Ai încredere în datele dintr-un JWT doar pentru că s-au decodat: semnătura trebuie verificată cu o bibliotecă dedicată.
Comenzi înrudite
encoding/base64.Encoding: Codează octeți ca text Base64 (litere, cifre, +/ sau -_); StdEncoding, URLEncoding și variantele Raw fără „=”.encoding/hex.EncodeToString: Scrie octeții în hexazecimal (două cifre 0-9a-f pe octet) și înapoi; forma obișnuită pentru hash-uri și chei.encoding/json.Unmarshal: Citește JSON și completează o valoare Go (structură, map, slice) dată prin pointer; potrivește cheile după etichetele json.