encoding/base64.Encoding.DecodeString în Go

Decodează un text Base64 înapoi în octeți; returnează eroare dacă textul nu e valid pentru codarea aleasă.

Sintaxă
func (enc *Encoding) DecodeString(s string) ([]byte, error)

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.