Форум программистов, компьютерный форум CyberForum.ru

пользователь вводит пароль,программа должна его вычислить перебором - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Jusar
0 / 0 / 0
Регистрация: 31.05.2012
Сообщений: 11
31.05.2012, 10:30     пользователь вводит пароль,программа должна его вычислить перебором #1
как объяснил мне учитель,программа должна после ввода пользователем пароля найти его,методом перебора.Например:ввел 123546,программа начинает перебор 123456-неверно,идёт дальше,123465-неверно,и так далле.Реализовать это нужно как с числами,так и с буквами.То есть по сути нужно просто задать массивы букв(латинских)и цифр.Как это всё сделать не совсем представляю.Нигде не могу найти-кто может помочь?(можно использовать простой С,С++)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2012, 10:30     пользователь вводит пароль,программа должна его вычислить перебором
Посмотрите здесь:

C++ пользователь вводит строчку,а программа выводит количество пробелов между словами в строке.
Программа должна удалять слово, которое укажет пользователь C++
пользователь вводит число, вывести на экран его побитово C++
C++ пользователь вводит число, вывести на экран его побитово
C++ Пользователь вводит 10 чисел программа должна выдать 2 максимальных(берём от 1 до 10,если выпадает 2 10,то программа должна выдать 2 10,а не 10,9)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
31.05.2012, 12:11     пользователь вводит пароль,программа должна его вычислить перебором #2
Jusar, не пойму в чём сложность. Вот алгоритм твоей перестановки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
char * replacing(char * str);
 
int main()
{
    char digits[] = "0123456789";
    unsigned int length   = strlen(digits);
    for(unsigned int i = 0; i < length; i++)
        cout<<strcpy(digits,replacing(digits))<<endl;
    system("pause");
    return 0;
}
 
char * replacing(char * str)
{
    char chr = str[0];
    strcpy((char *)&str[0],(char *)&str[1]);
    str[strlen(str)] = chr;
    return str;
}
Миниатюры
пользователь вводит пароль,программа должна его вычислить перебором  
Jusar
0 / 0 / 0
Регистрация: 31.05.2012
Сообщений: 11
31.05.2012, 14:43  [ТС]     пользователь вводит пароль,программа должна его вычислить перебором #3
наверно вы меня не так поняли.я имею ввиду,что пользователь вводит в программе пароль(например qwerty23) ,а программа должна сначала вычислить длинну пароля,потом (в моём понимании) вязть из массивов(заранее вбитых программу пользователем,например char s_latin[] ={'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'}; ну и цифры)и перебрать все возможные варианты паролей такой же длинны,а когда вычислит нужный(то есть тот же qwerty23)сообщит об этом пользователю , вывести сообщение на экран и прекратить генерацию паролей.Уважаемые,если поняли о чём я,помогите пожалуйста.
voral
345 / 325 / 46
Регистрация: 16.03.2008
Сообщений: 1,694
31.05.2012, 16:10     пользователь вводит пароль,программа должна его вычислить перебором #4
Ну раз можно вычислять длину, я бы сделал так:
0 Опеределяем i - индекс текущего тестируемого символа. И приравниваем к 0
1. Согласно длине искомого пароля заполнил бы массив (результирующий) первым символом алфавита, а первый взял из середины алфавита. (Алфавит должен быть отсортирован).
2. Сравнил бы с введенным паролем.
3. Если равно - конец игры
4. Сохраняем результат сравнения (больше или меньше)
5. Меняем i - символ. По принципу:
6. Если было первое сравнение Если тестируемый пароль меньше введенного берем символ из середины алфавита справа от текущего иначе справа
7. Как только алгоритм начинает при смене элемента на соседний менять результат сравнения - оставляем меньший и увеличиваем i

Т.е. имеем пароль tes
имеем алфавит abcdefklstz
faa - заполнили. меньше чем пароль
saa - меньше чем пароль
taa - меньше чем пароль
zaa - больше чем пароль, но индекс семнился на 1. Фиксируем первый элемент на предыдущем значении и работаем со вторым
tfa - больше чем пароль
tca - меньше чем пароль
tda - меньше чем пароль
tea - меньше чем пароль
tfa - больше чем пароль, но индекс сменили на 1 . Фиксируем второй элемент на предыдущем значении и работаем со третим
tef - меньше чем пароль
tes - бинго!
Jusar
0 / 0 / 0
Регистрация: 31.05.2012
Сообщений: 11
31.05.2012, 18:24  [ТС]     пользователь вводит пароль,программа должна его вычислить перебором #5
дак а основная проблема то в том что я не знаю как это реализовать в програмном коде
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
31.05.2012, 20:50     пользователь вводит пароль,программа должна его вычислить перебором #6
вот для пароля длиной 5 символов
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
#include <iostream>
#include <cstring>
#define ENCLOSED_CYCLES 5
 
void CalcI(int& i)
{
    if((i >= 48 && i < 57) || (i >= 65 && i < 90) || (i >= 97 && i <= 122)) ++i;
    else if(57 == i) i = 65;
    else i = 97;
}
 
int main()
{
    char pass[] = "01Aaz", res[ENCLOSED_CYCLES + 1]{'\0'};
    if(std::strlen(pass) == ENCLOSED_CYCLES)
    {
        for(int i0 = 48; i0 < 123; CalcI(i0))
        {
            res[0] = i0;
            for(int i1 = 48; i1 < 123; CalcI(i1))
            {
                res[1] = i1;
                for(int i2 = 48; i2 < 123; CalcI(i2))
                {
                    res[2] = i2;
                    for(int i3 = 48; i3 < 123; CalcI(i3))
                    {
                        res[3] = i3;
                        for(int i4 = 48; i4 < 123; CalcI(i4))
                        {
                            res[4] = i4;
                            if(!std::strcmp(pass, res))
                            {
                                std::cout << "res: " << res << std::endl;
                                return 0;
                            }
                        }
                    }
                }
            }
        }
        std::cout << "Password not found\n";
    }
    else std::cerr << "Incorrect length\n";
    return 0;
}
Jusar
0 / 0 / 0
Регистрация: 31.05.2012
Сообщений: 11
31.05.2012, 20:59  [ТС]     пользователь вводит пароль,программа должна его вычислить перебором #7
большое спасибо.единственное не могли бы вы закоментировать программу(например строчки 3 и 5 мне не совсем понятны),как можно модифицировать её для ввода большего количества символов(и будет ли ругаться программа на введение,например, 3 символов) и откуда беруться данные для перебора?
P.S. вносить это в Visual studio?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
31.05.2012, 21:05     пользователь вводит пароль,программа должна его вычислить перебором #8
Примерно так.
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 <stack>
#include <string>
 
void brute(const std::string& str, size_t level = 0, std::string cur = "")
{
    static const std::string alpha = "0123456789qwertyuiopasdfghjklzxcvbnm";
    
    if (level == str.length() )
    {
        if (str == cur)
            std::cout << cur << std::endl;
        
        return;
    }
    
    for (size_t i = 0; i < alpha.length(); ++i)
        brute(str, level + 1, cur + alpha[i]);
}
 
int main()
{
    std::string pass;
    std::cin >> pass;
    brute(pass);
}
Только учтите, что уже при 5 символах программа будет задумываться(36^5 вариантов все-таки).

Можно сделать эффективнее, если использовать std::stack вместо рекурсии, но мне лень.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 21:16     пользователь вводит пароль,программа должна его вычислить перебором
Еще ссылки по теме:

Пользователь вводит с клавиатуры 5 чисел. Программа выводит на экран их среднее арифметическое C++
Пользователь вводит вещественные числа x,y,z.Вычислить :max(x+y+z,xyz) C++
C++ Пользователь вводит с клавиатуры число, необходимо показать на экран сумму его цифр

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

Или воспользуйтесь поиском по форуму:
Jusar
0 / 0 / 0
Регистрация: 31.05.2012
Сообщений: 11
31.05.2012, 21:16  [ТС]     пользователь вводит пароль,программа должна его вычислить перебором #9
так.я и это не совсем понимаю не могли бы вы закоментировать?
Yandex
Объявления
31.05.2012, 21:16     пользователь вводит пароль,программа должна его вычислить перебором
Ответ Создать тему
Опции темы

Текущее время: 08:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru