programa en C ++ para generar contraseña aleatoria

Aquí, vamos a implementar un programa de conducción menú en C ++ para generar contraseñas al azar con varias combinaciones de letras y caracteres especiales.

Planteamiento del problema:

Escribir un programa controlado por menú para generar una contraseña aleatoria

restricción:

  1. contraseña debe constar de

    • minúsculas del alfabeto – A a Z
    • abecedario en mayúsculas – a a Z
    • Número – 0 a 9
    • símbolo especial! -, @, #, €,%, y

  2. longitud de la contraseña debe ser

    • mínimo – 7
    • máxima – 100

  3. contraseña debe comenzar con una letra (pueden ser mayúsculas o minúsculas)
  4. contraseña debe contener al menos 2 letra minúscula, 2 letra mayúscula, 1 número y 1 símbolo especial
  5. no hacer uso de cualquier función de biblioteca como rand () o srand ().
  6. Cada contraseña generada tiempo debe ser único.

Programa para generar una contraseña aleatoria en C ++

Nota: programa es compilado y ejecutado el Código bloque IDE (versión 17.12) usando GNU compilador GCC en la plataforma de Windows

#include <bits/stdc++.h>
using namespace std;
//selectArray is a utility function that is used to
//randomly generate a integer in the range 1 to 4 (both inclusive)
int selectArray()
{
srand(time(NULL));
int i = rand() % 5;
if (i == 0)
i++;
return i;
}
//getKey() is another utility function that is used to randomly generate
//an integer in the range 0 to 25 (both inclusive)
int getKey()
{
srand(time(NULL));
int key = rand() % 26;
return key;
}
void generate_password(int length)
{
//Intializing result string password as NULL.
string password = "";
//Strings whose characters will be used to build password
string alphabet = "abcdefghijklmnopqrstuvwxyz";
string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string s_symbol = "[email protected]#$%&";
string number = "0123456789";
//initializing local variables
int key, count_alphabet = 0, count_ALPHABET = 0, count_number = 0, count_s_symbol = 0;
//Count will store the length of the password being created,
//initially this will be zero(0)
int count = 0;
while (count < length) {
// selectArray() function will return a number 1 to 4
// and will use to select one of the above defined string
//(i.e alphabet or ALPHABET or s_symbol or number )
// 1 is for string alphabet
// 2 is for string ALPHABET
// 3 is for string number
// and 4 is for string s_symbol
int k = selectArray();
//for the first character of password it is mentioned that,
//it should be a letter
//so the string that should be selected is either alphabet or
//ALPHABET (i.e 1 or 2)
//following if condition will take care of it.
if (count == 0) {
k = k % 3;
if (k == 0)
k++;
}
switch (k) {
case 1:
// following if condition will check if minimum requirement of alphabet
// character has been fulfilled or not
// in case it has been fulfilled and minimum requirements of other
// characters is still left then it will break ;
if ((count_alphabet == 2) && (count_number == 0 || count_ALPHABET == 0 || count_ALPHABET == 1 || count_s_symbol == 0))
break;
key = getKey();
password = password + alphabet[key];
count_alphabet++;
count++;
break;
case 2:
// following if condition will check if minimum requirement of
// ALPHABET character has been fulfilled or not
// in case it has been fulfilled and minimum requirements of
// other characters is still left then it will break ;
if ((count_ALPHABET == 2) && (count_number == 0 || count_alphabet == 0 || count_alphabet == 1 || count_s_symbol == 0))
break;
key = getKey();
password = password + ALPHABET[key];
count_ALPHABET++;
count++;
break;
case 3:
// following if condition will check if minimum requirement
// of Numbers has been fulfilled or not
// in case it has been fulfilled and minimum requirements of
// other characters is still left then it will break ;
if ((count_number == 1) && (count_alphabet == 0 || count_alphabet == 1 || count_ALPHABET == 1 || count_ALPHABET == 0 || count_s_symbol == 0))
break;
key = getKey();
key = key % 10;
password = password + number[key];
count_number++;
count++;
break;
case 4:
// following if condition will check if minimum requirement of
// Special symbol character has been fulfilled or not
// in case it has been fulfilled and minimum requirements of
// other characters is still left then it will break ;
if ((count_s_symbol == 1) && (count_alphabet == 0 || count_alphabet == 1 || count_ALPHABET == 0 || count_ALPHABET == 1 || count_number == 0))
break;
key = getKey();
key = key % 6;
password = password + s_symbol[key];
count_s_symbol++;
count++;
break;
}
}
cout << "n-----------------------------n";
cout << " Password n";
cout << "------------------------------nn";
cout << " " << password;
cout << "nnPress any key continue n";
getchar();
}
int main()
{
int opt, length;
//Menu
do {
cout << "n-----------------------------n";
cout << " Random Password Generatorn";
cout << "------------------------------nn";
cout << " 1. Generate Password"
<< "n";
cout << " 2. Exit"
<< "nn";
cout << "Press key 1 to Generate Password and key 2 to exit : ";
cin >> opt;
switch (opt) {
case 1:
cout << "Enter Length : ";
cin >> length;
//if length is less than 7 , program will show error
if (length < 7) {
cout << "nError : Password Length Should be atleast 7n";
cout << "Press any key to try again n";
getchar();
}
// Length should not exceed 100 , program should show error if it exceeds
else if (length > 100) {
cout << "nError : Maximum length of password should be 100n";
cout << "Press any key to try again n";
getchar();
}
//Otherwise call generate_password() function to generate password
else
generate_password(length);
break;
default:
// If invalid option is chosen by user it will also show error
if (opt != 2) {
printf("nInvalid choicen");
printf("Please Press ( 1 ) to generate password and ( 2 ) to exit.n");
cout << "Press any key to try again n";
getchar();
}
break;
}
} while (opt != 2);
return 0;
}

salida


-----------------------------
Random Password Generator
------------------------------
1. Generate Password
2. Exit
Press key 1 to Generate Password and key 2 to exit : 1
Enter Length : 16
-----------------------------
Password
------------------------------
w#yS2S!youMue6yw
Press any key continue
-----------------------------
Random Password Generator
------------------------------
1. Generate Password
2. Exit
Press key 1 to Generate Password and key 2 to exit : 1
Enter Length : 50
-----------------------------
Password
------------------------------
cE8o!UAO#k6Wi8cCK2!c4kMuq!W2eY40!eaS!oEwi2E#0u!yi#
Press any key continue
-----------------------------
Random Password Generator
------------------------------
1. Generate Password
2. Exit
Press key 1 to Generate Password and key 2 to exit : 2
Process returned 0 (0x0) execution time : 24.358 s
Press any key to continue.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *