79 lines
5.0 KiB
C++
Executable File
79 lines
5.0 KiB
C++
Executable File
#include <iostream>//ввод/вывод
|
||
#include <vector>//хранение символов
|
||
#include <string>//работа со строками
|
||
#include <cstdlib>//работа с rand()
|
||
#include <ctime>//работа со временем
|
||
|
||
int main()
|
||
{
|
||
std::vector<std::string> allowedChars;
|
||
|
||
char useLetters, useDigits, useSpecials;//переменные символьного типа
|
||
int caseChoice = 0;//переменные целочисленного типа
|
||
int passwdLength = 0;//переменная для длинны пароля
|
||
|
||
std::cout << "=== Генератор паролей ===" << std::endl;//Типо заголовок
|
||
|
||
std::cout << "Использовать буквы? (y/n): ";//Запрашиваем использование букв
|
||
std::cin >> useLetters;//Ввод с клавиатуры
|
||
|
||
if (useLetters == 'y' || useLetters == 'Y') {
|
||
std::cout << "Выбери регистр:" << std::endl;
|
||
std::cout << "1 - Заглавные" << std::endl;
|
||
std::cout << "2 - Строчные" << std::endl;
|
||
std::cout << "3 - Оба" << std::endl;
|
||
std::cout << "Твой выбор: ";
|
||
std::cin >> caseChoice;//Выбор регистра
|
||
|
||
if (caseChoice == 1 || caseChoice == 3) {//если выбор заглавный регистр то (1) если оба то (3)
|
||
std::vector<std::string> engUpper = {"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"};
|
||
allowedChars.insert(allowedChars.end(), engUpper.begin(), engUpper.end());//копируем буквы из engUpper
|
||
}
|
||
if (caseChoice == 2 || caseChoice == 3) {//Если выбрал строчный реггистр то (2)
|
||
std::vector<std::string> engLower = {"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"};
|
||
allowedChars.insert(allowedChars.end(), engLower.begin(), engLower.end());//снова копируем
|
||
}
|
||
}
|
||
|
||
std::cout << "Использовать спецсимволы? (y/n): ";//Запрашшиваем использование символов
|
||
std::cin >> useSpecials;//Ввод с клавиатуры
|
||
|
||
if (useSpecials == 'y' || useSpecials == 'Y') {//Если используем вводим 'y'
|
||
std::vector<std::string> specials = {"!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "[", "]", "{", "}", ";", ":", ",", ".", "<", ">", "/", "?"};
|
||
allowedChars.insert(allowedChars.end(), specials.begin(), specials.end());//копируем и добавляем символы из specials в allowedChars
|
||
}
|
||
std::cout << "Использовать цифры? (y/n): ";//Запрашиваем использование цифр?
|
||
std::cin >> useDigits;//Ввод с клавиатуры
|
||
|
||
if (useDigits == 'y' || useDigits == 'Y') { //{Если используем вводим 'y'
|
||
std::vector<std::string> digits = {"0","1","2","3","4","5","6","7","8","9"};
|
||
allowedChars.insert(allowedChars.end(), digits.begin(), digits.end());//копируем и добавляем цифры из digits.begin в allowedChars
|
||
}
|
||
|
||
std::cout << "Введи желаемую длину пароля: ";//Запрашиваем длинну пароля
|
||
std::cin >> passwdLength;//Вводим
|
||
if (allowedChars.empty()) {//Если выбранных символов нет то:
|
||
std::cout << "Ошибка: не выбран ни один тип символов. Генерация невозможна." << std::endl;//ошибка
|
||
return 1;
|
||
}
|
||
|
||
if (passwdLength <= 0 || passwdLength>15) {//если длинна пароля меньше ноля и больше 10 то:
|
||
std::cout << "Ошибка: длина пароля должна быть положительным числом но не больше 15 символов." << std::endl;//ошибка
|
||
return 1;
|
||
}
|
||
|
||
std::srand(static_cast<unsigned int>(std::time(nullptr)));//Задаем генератору стартовое значение
|
||
std::cout << "\nСгенерированные пароли:" << std::endl;//Надпись "Сгенерированные пароли: "
|
||
|
||
for (int p = 0; p < 3; ++p) {//Генерация продолжается пока паролей не будет 3
|
||
std::string password = "";//Пустая строка для паролей
|
||
for (int i = 0; i < passwdLength; ++i) {//создается длинна пароля
|
||
int index = std::rand() % allowedChars.size();//генерируем целое число неограниченое по размерам. от нуля до размера(allowedChars -1)
|
||
password += allowedChars[index];//формируется пароль по одному символу из allowedChars
|
||
}
|
||
std::cout << password << std::endl;//вывод пароля
|
||
}
|
||
|
||
return 0;
|
||
}
|