Cpp/KeyGen.cpp
2026-05-17 02:56:32 +03:00

79 lines
5.0 KiB
C++
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}