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 curand.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.