crypto/rand.Text în Go

Returnează un text aleatoriu sigur (26 de caractere A-Z și 2-7, cel puțin 128 de biți), gata de folosit ca token sau secret.

Sintaxă
func Text() string

Ce face crypto/rand.Text

rand.Text() este cel mai simplu mod de a obține un secret: un text aleatoriu din alfabetul base32 standard (litere mari A-Z și cifrele 2-7), cu cel puțin 128 de biți de aleatoriu. În versiunea actuală are 26 de caractere. Este suficient de lung ca să nu poată fi ghicit și ca două valori să nu coincidă practic niciodată.

Îl poți folosi direct pentru identificatori de sesiune, chei de API, coduri de invitație sau nume de fișiere temporare. Documentația avertizează că versiunile viitoare pot returna texte mai lungi, deci nu te baza pe lungimea exactă (de exemplu într-o coloană CHAR(26)).

Ce returnează

Un string aleatoriu.

Exemple

Exemplul 1: Proprietățile textului generat

package main

import (
	"crypto/rand"
	"fmt"
	"strings"
)

func main() {
	t := rand.Text()
	fmt.Println("Lungime:", len(t))
	doarBase32 := strings.Trim(t, "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567") == ""
	fmt.Println("Doar A-Z și 2-7:", doarBase32)

	vazute := map[string]bool{}
	for range 10000 {
		vazute[rand.Text()] = true
	}
	fmt.Println("Valori diferite din 10000:", len(vazute))
}

Rezultat

Lungime: 26
Doar A-Z și 2-7: true
Valori diferite din 10000: 10000

Exemplul 2: Identificator de sesiune

Valoarea diferă la fiecare rulare.

package main

import (
	"crypto/rand"
	"fmt"
)

func main() {
	sesiune := rand.Text()
	fmt.Println("Set-Cookie: sesiune=" + sesiune + "; HttpOnly; Secure; SameSite=Lax")
}

Rezultat posibil (diferă la fiecare rulare)

Set-Cookie: sesiune=7KQ4ZJ2MXW5TBR6NFHC3DYPVLA; HttpOnly; Secure; SameSite=Lax

Greșeli frecvente

  • Folosești rand.Text() pe o versiune Go mai veche de 1.24: funcția nu există; generează octeți cu rand.Read și codează-i cu base32 sau base64.
  • Tai rezultatul ca să fie mai scurt (rand.Text()[:6]): cu mai puține caractere, valoarea poate fi ghicită prin încercări.

Comenzi înrudite

  • crypto/rand.Read: Umple un slice cu octeți aleatorii siguri criptografic, luați de la sistemul de operare (chei, tokenuri, sare).
  • net/http.Cookie: Cookie descrie un cookie; SetCookie îl trimite clientului; Request.Cookie citește cookie-ul trimis de browser.
  • crypto/rand.Int: Returnează un număr aleatoriu sigur, uniform în intervalul [0, max), ca *big.Int; bun pentru coduri PIN și OTP.