Random.secure în Dart

Un generator aleator sigur criptografic, potrivit pentru parole, coduri și token-uri; nu acceptă seed.

Sintaxă
factory Random.secure()

Ce face Random.secure

Random.secure() creează un generator care ia valorile din sursa criptografică a sistemului de operare. Numerele nu pot fi ghicite din cele anterioare, așa că este alegerea corectă pentru parole temporare, coduri de confirmare și chei.

Are aceleași metode ca Random (nextInt, nextDouble, nextBool), dar nu primește seed: rezultatul diferă la fiecare rulare și nu se poate repeta. Este puțin mai lent, deci pentru jocuri și simulări Random() este suficient.

Dacă sistemul nu are o sursă sigură, constructorul aruncă UnsupportedError.

Ce returnează

Un obiect Random sigur criptografic.

Exemple

Exemplul 1: Cod de confirmare din 6 cifre

Codul diferă la fiecare rulare, așa că afișăm doar lungimea și verificăm că are doar cifre.

import 'dart:math';

void main() {
  final r = Random.secure();
  final cod = List.generate(6, (_) => r.nextInt(10)).join();
  print('Lungime: ${cod.length}');
  print('Doar cifre: ${RegExp(r'^\d{6}$').hasMatch(cod)}');
}

Rezultat

Lungime: 6
Doar cifre: true

Exemplul 2: Parolă temporară

Rezultatul este altul la fiecare rulare.

import 'dart:math';

void main() {
  const litere = 'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789';
  final r = Random.secure();
  final parola = String.fromCharCodes(
    List.generate(12, (_) => litere.codeUnitAt(r.nextInt(litere.length))),
  );
  print('Parola ta temporară: $parola');
}

Rezultat posibil (diferă la fiecare rulare)

Parola ta temporară: q7HzeKm4XbT9

Greșeli frecvente

  • Încerci Random.secure(42). Constructorul nu are seed; dacă ai nevoie de un șir repetabil, folosește Random(42).
  • Generezi parole cu Random() simplu. Acela nu este sigur: din câteva valori se poate ghici restul.

Comenzi înrudite

  • Random: Generatorul de numere aleatorii; nextInt(max) dă un întreg între 0 și max – 1. Cu seed, șirul se repetă.
  • Random.nextDouble: nextDouble dă un număr real între 0.0 (inclusiv) și 1.0 (exclusiv); nextBool dă true sau false.
  • base64Encode: base64Encode transformă octeți în text Base64; base64Decode face invers, din text Base64 în octeți.