Io lo farei in una maniera abbastanza diversa e sfrutterei molto di più il C++ (usando una piccola parte di quello che offre) xD. Scusa la critica, (non me ne volere) ma un programma fatto in questo modo mi sembra più un programma C "con cin e cout" che un programma in C++. Innanzitutto terrei in considerazione fattori non poco trascurabili: l'
entropia e la
distribuzione (di simboli, caratteri e numeri). Se sei interessato ti propongo del materiale che ti può aiutare a capire qualcosa di più:
- You are not allowed to view links.
Register or
Login- You are not allowed to view links.
Register or
LoginScarterei quindi
rand() e
srand() basati su
<ctime>. Detto questo userei la librerie standard
<random>
Per la generazione della password mi servirei della classe
std::random_device
Una classe che mi permette di generare numeri casuali uniformemente distribuiti secondo You are not allowed to view links.
Register or
Login. Una volta generato questo numero lo darei in pasto alla classe:
std::mt19937
Questa classe si basa sul
Mersenne Twister Engine, un engine per la generazione di numeri pseudo-casuali basato sul You are not allowed to view links.
Register or
Login. Il suo nome deriva dal fatto che fa utilizzo dei numeri primi detti: You are not allowed to view links.
Register or
Login. Una volta fatto questo stabilirei un campo di distribuzione usando:
std::uniform_int_distribution
Questa mi genera dei numeri secondo una distribuzione discreta uniforme in un determinato intervallo. Esempio:
std::uniform_int_distribution<int> dNum(0, 9); //Distanza dei numeri (10-1)
std::uniform_int_distribution<int> dLet(0, 25); //Distanza delle lettere (sono 26 lettere quindi partendo da 0 la distanza è 26-1)
std::uniform_int_distribution<int> dSim(0, 13); //Distanza tra i simboli, considerandone 14 (14-1)
char letMin[26] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
char letMai[26] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
char simboli[14] = { '!', '#', '@', '~', '$', '^', '.', ',', '-', '+', '%', '?', '*', '=' };
Questo è solo un esempio di come si potrebbe usare meglio il C++ per creare un programma del genere. Ovviamente non devi basarti per forza su quello che ho scritto io, il mio era solo un esempio. Ho fatto un programma del genere come esercizio, se non vuoi spoiler te lo carico su Git così puoi vederlo