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șteRandom(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.