encoding/base64.Encoding în Go

Codează octeți ca text Base64 (litere, cifre, +/ sau -_); StdEncoding, URLEncoding și variantele Raw fără „=”.

Sintaxă
import "encoding/base64"

var StdEncoding, URLEncoding, RawStdEncoding, RawURLEncoding *Encoding

func (enc *Encoding) EncodeToString(src []byte) string

Ce face encoding/base64.Encoding

Base64 transformă orice octeți (o imagine, o cheie, un text cu diacritice) într-un text format doar din 64 de caractere sigure: litere, cifre și două simboluri. Este folosit în e-mailuri, în URL-uri de tip data:, în antetul HTTP Authorization: Basic și în JSON Web Tokens. Rezultatul este cu aproximativ o treime mai lung decât datele originale. Base64 nu este criptare: oricine îl poate decoda.

Pachetul are patru codări gata făcute, de tip *base64.Encoding: StdEncoding (standard, cu +, / și completare cu =), URLEncoding (cu - și _, sigur în URL-uri și nume de fișiere) și variantele RawStdEncoding, RawURLEncoding, fără = la final. enc.EncodeToString(date) returnează textul codat.

Parametri

Parametru Descriere
src Octeții de codat (un text se convertește cu []byte(s)).

Ce returnează

Textul Base64.

Exemple

Exemplul 1: Cele patru codări

Octeții aleși produc + și / în codarea standard, ca să se vadă diferența față de varianta URL.

package main

import (
	"encoding/base64"
	"fmt"
)

func main() {
	text := []byte("Iași?>>")
	fmt.Println("Std:   ", base64.StdEncoding.EncodeToString(text))
	fmt.Println("URL:   ", base64.URLEncoding.EncodeToString(text))
	fmt.Println("RawStd:", base64.RawStdEncoding.EncodeToString(text))
	fmt.Println("RawURL:", base64.RawURLEncoding.EncodeToString(text))
	fmt.Println(len(text), "octeți ->", len(base64.StdEncoding.EncodeToString(text)), "caractere")
}

Rezultat

Std:    SWHImWk/Pj4=
URL:    SWHImWk_Pj4=
RawStd: SWHImWk/Pj4
RawURL: SWHImWk_Pj4
8 octeți -> 12 caractere

Exemplul 2: Antet Authorization: Basic

package main

import (
	"encoding/base64"
	"fmt"
	"net/http"
)

func main() {
	date := base64.StdEncoding.EncodeToString([]byte("ana:parola-secreta"))
	fmt.Println("Authorization: Basic " + date)

	req, _ := http.NewRequest("GET", "https://api.exemplu.ro/", nil)
	req.SetBasicAuth("ana", "parola-secreta")
	fmt.Println("SetBasicAuth: ", req.Header.Get("Authorization"))
}

Rezultat

Authorization: Basic YW5hOnBhcm9sYS1zZWNyZXRh
SetBasicAuth:  Basic YW5hOnBhcm9sYS1zZWNyZXRh

Greșeli frecvente

  • Folosești Base64 ca să „ascunzi” parole sau date personale: se decodează instant. Pentru secrete folosește criptare sau hash-uri de parole.
  • Pui Base64 standard într-un URL: + devine spațiu și / separă căi. Folosește URLEncoding sau RawURLEncoding.

Comenzi înrudite

  • encoding/base64.Encoding.DecodeString: Decodează un text Base64 înapoi în octeți; returnează eroare dacă textul nu e valid pentru codarea aleasă.
  • 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.
  • crypto/sha256.Sum256: Calculează amprenta SHA-256 a unor date: 32 de octeți (64 de cifre hex) care se schimbă complet la orice modificare.