Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
1 / 1 / 0
Регистрация: 11.11.2017
Сообщений: 40

Брутфорс для подбора пароля

22.02.2022, 18:58. Показов 7387. Ответов 13

Студворк — интернет-сервис помощи студентам
Подскажите, как можно реализовать брутфорс для подбора пароля, пароль может содержать только латинские буквы верхнего регистра. Получилось реализовать таким образом, но подбор занимает очень много времени, как еще можно реализовать функцию Brute?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>
 
using namespace std;
 
template <typename F>
string Brute(F check) {
    string str;
    while(check(str) != true){
        for (int i = 0; i < 5; ++i){
            str.push_back(('A' + rand() % ('Z' - 'A')));
        }
        cout << str << endl;
        str = "";
    }
 
    return str;
}
 
int main() {
    string password = "ABCDE"s;
    auto check = [password](const string& s) {
        return s == pass;
    };
    cout << Brute(check) << endl;
}
Добавлено через 10 минут
Вопрос чисто ученический, не в целях создания вредоносного ПО. Не закрывайте по 5.7.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.02.2022, 18:58
Ответы с готовыми решениями:

Програма подбора пароля
Помогите написать программу для подбора пароля на с++. Смысл в том, чтоб при написании в консоль пароля (букв, цифр и символов)...

Программа для подбора пароля
Написал программу в которой должен ввести логин и пароль. Хочу написать отдельную программу для подбора пароля к первой программе. Проблема...

Программа для подбора пароля
Доброго времени суток! Пытаюсь написать программу для подбора пароля. Брут форс:) Сейчас пытаюсь написать программу для подбора...

13
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
22.02.2022, 19:32
Цитата Сообщение от MikhailP Посмотреть сообщение
rand()
Как повезет?
Цитата Сообщение от MikhailP Посмотреть сообщение
как еще можно
сочетания с повторениями
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.02.2022, 19:42
Цитата Сообщение от MikhailP Посмотреть сообщение
о подбор занимает очень много времени
Для того пароли и придуманы!
0
1 / 1 / 0
Регистрация: 11.11.2017
Сообщений: 40
22.02.2022, 19:50  [ТС]
Помимо rand(), есть мысль реализации пяти циклов по char от 'A' до 'Z' внутри функции, но тогда нужно будет каждый символ сравнивать с буквой пароля, а доступа к password у функции нет, что в таком случае можно сделать?

Добавлено через 3 минуты
Да, но пароль из пяти символов должен же перебираться быстро
0
Заблокирован
22.02.2022, 19:50
265 ~12M комбинаций, для чего rand(), кстати 'Z' - 'A'=25
0
1 / 1 / 0
Регистрация: 11.11.2017
Сообщений: 40
22.02.2022, 20:32  [ТС]
Цитата Сообщение от RahatLukum Посмотреть сообщение
кстати 'Z' - 'A'=25
Читаемости для
0
Заблокирован
22.02.2022, 20:34
вот только их 26
0
1 / 1 / 0
Регистрация: 11.11.2017
Сообщений: 40
22.02.2022, 20:36  [ТС]
Цитата Сообщение от RahatLukum Посмотреть сообщение
вот только их 26
Для этого и " 'A' + "
0
Заблокирован
22.02.2022, 20:51
нет слов, ну я хоть постарался
0
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,562
22.02.2022, 20:58
Ну распараллелить можно, наверное.
0
1 / 1 / 0
Регистрация: 11.11.2017
Сообщений: 40
22.02.2022, 21:01  [ТС]
Цитата Сообщение от RahatLukum Посмотреть сообщение
нет слов
Эх, ну простите глупый юмор, не хотел Вас расстроить.
0
Заблокирован
22.02.2022, 21:18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
char ps0[]="ZYXWV";
char ps1[6]="";
int f;
void setp(int i)
{
    for(char ch='A'; ch<='Z' && !f; ch++)
    {
        ps1[i]=ch;
        if(i+1<5) setp(i+1);
        else
            if(!strcmp(ps0,ps1))
                f=1;
    }
}
int main()
{
    f=0;
    setp(0);
    cout<<ps1<<endl;
    system("pause");
    return 0;
}
1
 Аватар для igorrr37
2882 / 2029 / 992
Регистрация: 21.12.2010
Сообщений: 3,781
Записей в блоге: 9
23.02.2022, 00:04
Вот два варианта с рекурсией и без. Семизначный находит за 7 секунд, а дальше долго. Хотя можно попробовать пооптимизировать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
 
std::string abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", pass = "CFWWSWQ";
std::string str;
bool found = false;
 
// рекурсивный брут 
void BrutRec(int n)
{
    for (int i = 0; i < abc.size(); ++i)
    {
        str.push_back(abc[i]);
        if (n > 1)
        {
            BrutRec(n - 1);
            if (found)
            {
                return;
            }
        }
        if (str == pass)
        {
            found = true;
            break;
        }
        else
        {
            str.pop_back();
        }
    }
}
 
 
int main() 
{
#if 1
    for (int rd = 1; rd <= 10; ++rd) // какие длины паролей перебирать
    {
        BrutRec(rd);
        if (found)
        {
            break;
        }
    }
    std::cout << str << std::endl;
#else
 
    // Брут без рекурсии 
    std::string stk;
    stk.reserve(32);
    std::vector<int> vi;
    vi.reserve(32);
    char c{};
    int i = 0;
    for (int rd = 1; rd <= 10; ++rd) // какие длины паролей перебирать
    {
        for (int n = rd; n >= 1; )
        {
            for (; i < abc.size(); ++i)
            {
                c = abc[i];
                if (n > 1)
                {
                    break;
                }
                if (stk + c == pass)
                {
                    std::cout << "Found\n";
                    found = true;
                    break;
                }
            }
            if (found) break;
            if (n > 1 && i != abc.size())  // вход внутрь
            {
                stk.push_back(c);
                vi.push_back(i);
                i = 0;
                --n;
            }
            else  // выход вверх
            {
                if (i == abc.size() && stk.empty())
                {
                    i = 0;
                    break;
                }
 
                i = vi.back();
                ++i;
                stk.pop_back();
                vi.pop_back();
                ++n;
            }
        }
        if (found) break;
    }
#endif
 
    std::cout << "time: " << clock() / 1000.  << std::endl;
}
2
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
23.02.2022, 00:28
Лучший ответ Сообщение было отмечено MikhailP как решение

Решение

Цитата Сообщение от MikhailP Посмотреть сообщение
но подбор занимает очень много времени, как еще можно реализовать функцию Brute?
1. Уберите cout из функции подбора. Вывод в консоль отнимает очень много времени;
2. Представьте, что ваша строка - это число в некоторой странной алфавитной системе счисления. Прибавляйте в цикле по единице и делайте перенос "единицы" в другой разряд, когда текущий уже достиг буквы 'Z';
3. Я бы еще упомянул выделение динамической памяти, но на таких коротких паролях его скорее всего нигде не будет.

Цитата Сообщение от MikhailP Посмотреть сообщение
Эх, ну простите глупый юмор, не хотел Вас расстроить.
Человек хотел навести вас на мысль, что ваша текущая формула никогда не выдаст букву 'Z'.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2022, 00:28
Помогаю со студенческими работами здесь

Я написал программу для подбора пароля. Как заставить ее вписывать пароли в окошко WinRar
Схватил когда-то трояна, он все в архивы покидал. А теперь очень нужен архив)

Что работает неправильно в коде для подбора пароля зашифрованного crypt (хакерское задание CS50 №2)
Подскажите, я уже целый день просидел - не смог найти проблему. GDB показывает что все работает как задумано. Проверяю с односимвольного...

Процедура подбора пароля
Ты внимательно читал что я написал? О какой программе взлома может идти речь? если в условии сказано: Программа содержит процедуру...

Скрипт подбора пароля
Не получается написать скрипт для последовательного подбора пароля. Не надо говорить что этот скрипт работает через random. random...

Создание программы подбора пароля
Составить, отладить и представить преподавателю для проверки программу, решающую Ваш вариант задания. Главная программа должна обеспечивать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru