Ce face crypto.randomBytes / randomUUID / randomInt
Math.random() nu este potrivit pentru lucruri care trebuie să fie greu de ghicit (token-uri de resetare a parolei, coduri de confirmare, chei). Funcțiile din node:crypto folosesc generatorul sigur al sistemului de operare.
randomBytes(n) întoarce n octeți aleatorii într-un Buffer; transformați în hex sau base64url devin token-uri potrivite pentru adrese web. randomInt(min, max) dă un întreg între min (inclus) și max (exclus), fără dezechilibrul care apare la Math.floor(Math.random() * n).
randomUUID() generează un identificator unic de forma xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx (UUID versiunea 4). Aceeași funcție există și global, ca crypto.randomUUID(), în browser și în Node.js (vezi pagina din secțiunea JavaScript).
Parametri
| Parametru | Descriere |
|---|---|
n |
Numărul de octeți (randomBytes). |
min, max |
Intervalul pentru randomInt: min inclus (implicit 0), max exclus. |
Ce returnează
randomBytes: un Buffer. randomUUID: un șir de 36 de caractere. randomInt: un număr întreg.
Exemple
Exemplul 1: Token-uri, UUID și cod de confirmare
import { randomBytes, randomUUID, randomInt } from "node:crypto";
console.log(randomBytes(16).toString("hex"));
console.log(randomBytes(24).toString("base64url"));
console.log(randomUUID());
console.log(String(randomInt(0, 1_000_000)).padStart(6, "0"));
Rezultat posibil (diferă la fiecare rulare)
9f2c4e0b7a1d38e65c0f4b2a9d7e1c3f
q3V_8pZr1xK0tWm2c9YbN5aLhD4eR7uF
2b8d1e64-7f3a-4c1d-9e0b-5a6f7c8d9e10
048213
Exemplul 2: Ce formă au valorile
Valorile se schimbă la fiecare rulare, dar forma lor nu: verificăm lungimile și tiparul UUID.
import { randomBytes, randomUUID, randomInt } from "node:crypto";
const token = randomBytes(32).toString("hex");
console.log("token hex:", token.length, "caractere");
const uuid = randomUUID();
console.log("UUID v4 valid:", /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(uuid));
const zaruri = Array.from({ length: 1000 }, () => randomInt(1, 7));
console.log("între 1 și 6:", Math.min(...zaruri), Math.max(...zaruri));
Rezultat
token hex: 64 caractere
UUID v4 valid: true
între 1 și 6: 1 6
Exemplul 3: Alegerea aleatorie a unui câștigător
import { randomInt } from "node:crypto";
const participanti = ["Ana", "Ion", "Maria", "Vlad", "Elena"];
const castigator = participanti[randomInt(participanti.length)];
console.log("Câștigătorul concursului:", castigator);
Rezultat posibil (diferă la fiecare rulare)
Câștigătorul concursului: Maria
Greșeli frecvente
- Generezi token-uri de resetare a parolei cu
Math.random().toString(36): valorile pot fi ghicite. FoloseșterandomBytes(32). - Scrii
randomInt(1, 6)pentru un zar:maxeste exclus, deci 6 nu apare niciodată. ScrierandomInt(1, 7). - Pui un token
base64într-o adresă web: caracterele+,/și=trebuie codificate. Folosește"base64url".
Comenzi înrudite
crypto.createHash / createHmac: Calculează amprenta (hash) unui text sau fișier cu SHA-256 și semnături HMAC pentru verificarea mesajelor.crypto.scrypt (parole): Transformă o parolă într-o cheie greu de spart, cu sare aleatorie: modul corect de a salva parolele cu modulele Node.js.Buffer: Șir de octeți din Node.js: date binare din fișiere, rețea sau criptografie, cu conversii în text, hex și base64.