This commit is contained in:
DE 2026-05-17 02:56:32 +03:00
commit ae37c0319a
5 changed files with 389 additions and 0 deletions

143
BrutForce.cpp Executable file
View File

@ -0,0 +1,143 @@
#include<iostream>//Ввод вывод
#include<fstream>//Работа с файлами
#include<string>//Работа со строками
#include<vector>//Работа с динамическими массивами
#include<algorithm>//Работа с алгоритмами
#include<chrono>//Работа с временем
#include<thread>//Работа с многопоточностью
std::vector<std::string>usernames;// Храним имена пользователей
std::vector<std::string>passwords;// Храним пароли
void addUserFromFile()// Объявляем функцию добавления пользователей в файл
{
std::ifstream file("users.txt");// Создаём объект file типа std::ifstream
if(!file){//Если файл не открылся
std::cout<<"Файл не найден"<<std::endl;//Выводим сообщение об ошибке
return ;//Завершаем функцию
}
std::string username, password;// Объявляем переменные типа string для пароля и имени пользователя
while (file >> username >> password){//Цикл читает файл до тех пор пока есть сходства
usernames.push_back(username);//Добавляем элемент в конец вектора
passwords.push_back(password);//Добавляем объект в конец вектора
}
}
bool Verifier(const std::string& username, const std::string& password,//Проверка совпадений
const std::vector<std::string>& usernames, const std::vector<std::string>& passwords)//Списки логинов и паролей
{
for (size_t i=0; i<usernames.size(); i++)//Проходим по всем логигнам
{
if(usernames[i] == username && passwords[i] == password){//Если логин и пароль совпадают
return true;//Вход разрешён
}
}
return false;//конец проверки
}
bool userExists(const std::string& username){//Проверяем наличие пользователя
for(const auto& existing: usernames){//Перебираем список логинов
if(existing == username){//Если логин найден
return true;//Пользователь существует
}
}
return false;//Пользователь не найден
}
void bruteSmart(const std::string& targetPassword, const std::string& charset){//Функция умного подбора пароля
std::string current = std::string(targetPassword.length(), '.');//Строка заготовка из точек
for (size_t i=0; i<targetPassword.length();++i){//Перебираем каждый символ пароля
for(char c : charset){//Перебираем каждый символ из набора символов
current[i]=c;//Подставляем символ
std::cout<<"Пробуем: "<<current<<"\r"<<std::flush;//Вывод текущей попытки
std::this_thread::sleep_for(std::chrono::milliseconds(30));//Небольшая задержка
if(c == targetPassword[i]){//Если символ совпал с оригиналом
break;//Переходим к следующему символу
}
}
}
std::cout<<"\nПароль подобран: "<<current<<std::endl;//Выводим найденный пароль
}
void bruteForce(const std::string& username){//Запуск брутфорса по логину
auto it =std::find(usernames.begin(), usernames.end(), username);//Ищем логин в списке
if(it == usernames.end()){//Если не найден
std::cout<<"Пользователь не найден"<<std::endl;//Выводим сообщение
return;//Выход из функции
}
size_t index = std::distance(usernames.begin(), it);//Получаем индекс пользователя
std::string targetPassword = passwords[index];//Получаем его пароль
const std::string charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-_=+[]{};:'\",.<>?/\\|~";//Допустимые символы
std::cout<<"Запуск брутфорса на пользователя: " << username<<std::endl;//Вывод надписи
bruteSmart(targetPassword, charset);//Вызов самого брутфорса
}
int main(){
addUserFromFile();//Добавляем пользователя в файл
while(true){//Бесконечный цикл для отображения
std::cout<<"\n===MENU==="<<std::endl;//Выводим надпись MENU
std::cout<<"1. Проверка пользователя"<<std::endl;//Выводим надпись "1. Проверка пользователя"
std::cout<<"2. Зарегистрировать нового пользователя"<<std::endl;//Выводим надпись "2.Зарегистрировать пользователя ""
std::cout<<"3. Брутфорс"<<std::endl;//Вывод "Брутфорс"
std::cout<<"4. Выход"<<std::endl;//Вывод надписи "3.Выход"
std::cout<<"Выбери действие: "<<std::endl;//Выводим "Выбери действие"
int choice;// Переменная хранящаяя выбор пользователя (1 , 2 или 3)
std::cin>>choice;//Ввод с клавиатуры
std::cin.ignore(); // пропускаем символ новой строки после ввода, чтобы избежать проблем с последующим вводом строк
if(choice==1){//Условие выбора
std::string username;//Переменная хранит имя пользователя и пароль
std::cout<<"Введи логин: ";//Запрашиваем логин
std::getline(std::cin, username);//Вводим логин с клавиатуры
if(userExists(username)){//Если введеные пользователем данные совпадают
std::cout<<"Пользователь найден"<<std::endl;//Выводим разрешенный доступ
}else{//Иначе
std::cout<<"Неверный логин или пароль"<<std::endl;//Выводим ошибку
}
}else if (choice ==2){//Условие выбора
std::string newUsername, newPassword;//Переменная хранящая новый пароль и логигн для регистрации нового пользователя
std::cout<<"Придумай логин: ";//Запрашиваем новыйь
std::getline(std::cin, newUsername);//Вводим с клавиатуры
std::cout<<"Придумай пароль: ";//Запрашиваем
std::getline(std::cin, newPassword);//Вводим новый пароль читая всю строку
if(userExists(newUsername)){//Если пользователь уже существует
std::cout<<"Такой пользователь уже существует"<<std::endl;//Выводим сообщение
}else{//Иначе
usernames.push_back(newUsername);//Добавляем логин
passwords.push_back(newPassword);//Добавляем логин
std::ofstream outFile("users.txt", std::ios::app);//Открываем файл для записи
if(outFile){
outFile<<newUsername<<" "<<newPassword<<std::endl;//Сохраняем данные
std::cout<<"регистрация успешна"<<std::endl;//Вывод сообщения
}else{//Иначе
std::cout<<"Ошибка записи в файл"<<std::endl;//Выводим ошибку
}
}
}else if(choice == 3){//Если выбор 3
std::string username;//Переменная для хранения имени пользователя
std::cout<<"Введите имя пользователя для брутфорса: ";//Выводим запрос на ввод
std::getline(std::cin,username);//Ввод имени пользователя(с учетом пробелов)
bruteForce(username);//Запуск буртфорса
}else if(choice ==4){//Если выбор 4
std::cout<<"Выход..."<<std::endl;//Выводим надпись
break;//Завершение программы
}else{//Если введен некорректный пункт меню
std::cout<<"Некорректный выбор, попробуй еще раз"<<std::endl;//Ошибка
}
}
return 0; //Завершение
}

78
KeyGen.cpp Executable file
View File

@ -0,0 +1,78 @@
#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;
}

66
color_detection.cpp Executable file
View File

@ -0,0 +1,66 @@
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::VideoCapture cap(0);
if (!cap.isOpened()) {
std::cout << "Не удалось открыть камеру\n";
return -1;
}
cv::Mat frame, hsv, mask1, mask2, mask;
while (true) {
cap >> frame;
if (frame.empty()) break;
cv::cvtColor(frame, hsv, cv::COLOR_BGR2HSV);
cv::Scalar lower_red1(0, 120, 70);
cv::Scalar upper_red1(10, 255, 255);
cv::Scalar lower_red2(170, 120, 70);
cv::Scalar upper_red2(180, 255, 255);
cv::inRange(hsv, lower_red1, upper_red1, mask1);
cv::inRange(hsv, lower_red2, upper_red2, mask2);
cv::bitwise_or(mask1, mask2, mask);
cv::GaussianBlur(mask, mask, cv::Size(7,7), 0);
std::vector<std::vector<cv::Point>> contours;
cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
for (const auto &c : contours) {
if (cv::contourArea(c) > 1000) {
cv::Rect r = cv::boundingRect(c);
cv::rectangle(frame, r, cv::Scalar(0, 255, 0), 2);
cv::Moments m = cv::moments(c);
if (m.m00 > 0) {
int cx = m.m10 / m.m00;
int cy = m.m01 / m.m00;
cv::circle(frame, cv::Point(cx, cy), 8, cv::Scalar(0, 0, 255), -1);
}
}
}
cv::imshow("Red Tracking", frame);
cv::imshow("Mask", mask);
if (cv::waitKey(1) == 27) break;
}
cap.release();
cv::destroyAllWindows();
return 0;
}

53
face_detection.cpp Normal file
View File

@ -0,0 +1,53 @@
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::VideoCapture cap(0);
if (!cap.isOpened()) {
std::cout << "Не удалось открыть камеру\n";
return -1;
}
cv::CascadeClassifier face_cascade;
std::string path = "/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml";
if (!face_cascade.load(path)) {
std::cout << "Ошибка загрузки каскада\n";
return -1;
}
cv::Mat frame, gray;
while (true) {
cap >> frame;
if (frame.empty()) break;
cv::cvtColor(frame, gray, cv::COLOR_BGR2GRAY);
std::vector<cv::Rect> faces;
face_cascade.detectMultiScale(
gray,
faces,
1.1,
5,
0,
cv::Size(30, 30)
);
for (const auto &f : faces) {
cv::rectangle(frame, f, cv::Scalar(0, 255, 0), 2);
}
cv::imshow("Face Detection", frame);
if (cv::waitKey(1) == 27) break;
}
cap.release();
cv::destroyAllWindows();
return 0;
}

49
hand&arm_detection.cpp Executable file
View File

@ -0,0 +1,49 @@
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::VideoCapture cap(0);
if (!cap.isOpened()) {
std::cout << "Не удалось открыть камеру\n";
return -1;
}
cv::Mat frame, hsv, mask;
while (true) {
cap >> frame;
if (frame.empty()) break;
cv::cvtColor(frame, hsv, cv::COLOR_BGR2HSV);
cv::Scalar lower(0, 30, 60);
cv::Scalar upper(20, 150, 255);
cv::inRange(hsv, lower, upper, mask);
cv::GaussianBlur(mask, mask, cv::Size(7,7), 0);
std::vector<std::vector<cv::Point>> contours;
cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
for (const auto &c : contours) {
if (cv::contourArea(c) > 8000) {
cv::Rect r = cv::boundingRect(c);
cv::rectangle(frame, r, cv::Scalar(255, 0, 0), 2);
}
}
cv::imshow("Hand Tracking", frame);
cv::imshow("Mask", mask);
if (cv::waitKey(1) == 27) break;
}
cap.release();
cv::destroyAllWindows();
return 0;
}