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

Генератор паролей - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
makushkin
Сообщений: n/a
26.12.2012, 21:26     Генератор паролей #1
Кто может чётко написать коментарии для генератора паролей
Просто я учусь программировать на С++ и вот решил разбирать несложные коды

Добавлено через 33 секунды
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
#include <iostream>
#include <algorithm>
#include <time.h>
#include <stdlib.h>
#include <fstream>
 
using std::cout;
using std::cin;
using std::endl;
 
class PassGen {
 
public:
    void displayMessage()
    {
        int passLenght;
        int numOfPasswords;
        char * filename = new char;
 
        cout << "Enter len of password "; // задаём длину пароля 
        cin >> passLenght; // присваиваем длину   пароля  переменной (int passLenght)
        cout << "count password "; // число паролей 
        cin >> numOfPasswords; //  присваиваем колл-во паролей 
        cout << "our pass: " << numOfPasswords << "." << endl; 
        cout << endl;
        cout << "Enter file of write password: ";
        cin >> filename; // присваиваем значение (имя файла)
 
        std::ofstream outFile(filename); // записываем в кончный файл 
 
        for (int k = 0; k < numOfPasswords; k++) {
            for (int i = 0; i < passLenght; ++i) {    
                numOfChars(passLenght);
                passGenerator(passLenght);
                outFile << password [i];
            }
            outFile << endl;
        }
        outFile.close();
 
        cout << "password succerfly generater of  " << filename << "" << endl;
    }
 
    void passGenerator(int passLenght)
    {
        password = new char [passLenght];
 
        for (int i = 0; i < numOfNumbers; ++i) {
            password [i] = char(rand() % 10 + 48);
        }
        for (int i = numOfNumbers; i < numOfNumbers + numOfBigChars; ++i) {
            password [i] = char(rand() % 26 + 65);
        }
        for (int i = numOfNumbers + numOfBigChars; i < passLenght; ++i) {
            password [i] = char(rand() % 26 + 97);
        }
         std::random_shuffle(password, password + passLenght);        
    }
 
    void numOfChars(int passLenght)
    {
        numOfSmallChars = rand() % passLenght;
        int charRandEnd = passLenght - numOfSmallChars;
        numOfBigChars = rand() % charRandEnd;
        numOfNumbers = passLenght - numOfSmallChars - numOfBigChars;
    }
 
private:
    int numOfSmallChars;
    int numOfBigChars;
    int numOfNumbers;
    char * password;
};
 
int main()
{
    srand(time(NULL));
    PassGen * pass = new PassGen;
    pass->displayMessage();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2012, 21:26     Генератор паролей
Посмотрите здесь:

генератор паролей C++
C++ Генератор паролей
генератор паролей C++
C++ Генератор паролей (нужна проверка)
C++ генератор уникальных паролей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
beats
 Аватар для beats
98 / 36 / 4
Регистрация: 09.12.2012
Сообщений: 565
10.02.2013, 21:40     Генератор паролей #2
Классно сделано! Мне тоже очень интересно, и я не могу всего понять! Если кто то может то допишите комментарии пожалуйста к коду выше или объясните ее устройство!
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
10.02.2013, 21:42     Генератор паролей #3
Цитата Сообщение от beats Посмотреть сообщение
Классно сделано! Мне тоже очень интересно, и я не могу всего понять! Если кто то может то допишите комментарии пожалуйста к коду выше или объясните ее устройство!
что вам тут не понятно? поточнее...
код не блещет, если честно
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
10.02.2013, 21:47     Генератор паролей #4
а это работает вообще?
Цитата Сообщение от makushkin Посмотреть сообщение
C++
1
2
3
4
5
char * filename = new char;
//...
cin >> filename; // присваиваем значение (имя файла)
//...
std::ofstream outFile(filename); // записываем в кончный файл
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
10.02.2013, 21:52     Генератор паролей #5
Цитата Сообщение от Croessmah Посмотреть сообщение
а это работает вообще?
да работает, не поверите )
beats
 Аватар для beats
98 / 36 / 4
Регистрация: 09.12.2012
Сообщений: 565
10.02.2013, 22:00     Генератор паролей #6
с цифрами я понял. а вот как вообще буквами аперировать нет.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
10.02.2013, 22:03     Генератор паролей #7
Цитата Сообщение от abit Посмотреть сообщение
да работает, не поверите )
какой ужас...

в любом случае утечка памяти тут и в passGenerator
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2013, 22:15     Генератор паролей #8
makushkin, поробуй вот этот простой класс, сравни, что осталось от твоего кода и что по другому, также обрати внимание на char-овский контейнер std::string, который значительно облегчает разработку подобных приложений
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
#include <ctime>
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
 
class CPassGen
{
private:
    string pass;
public :
    CPassGen();//конструктор по умолчанию
    string getPassword(int length);//возвращает пароль длинной length
    void   getPassword();//перегруженный метод
};
 
CPassGen::CPassGen()
{
    srand(time(0));//Установка нач значения генератора случ чисел
}
 
string CPassGen::getPassword(int length)
{
    string password = "";
    for(int i = 0; i < length; i++)
        password += char('0' + rand() % ('z' - '0'));
    return password;
}
 
void CPassGen::getPassword()
{
    int k;
    int length = 0;
    int count  = 0;
    cout << "Enter len of password : ";cin>>length;
    cout << "Enter num of passwords: ";cin>>count;
 
    string password;
    ofstream outFile("passwords.txt");
    if(!outFile.is_open())
        cout<<"Error open passwords.txt"<<endl;
    else
    for (k = 0; k < count; k++)
    {
        password = getPassword(length);//Генерируем очередной пароль
        cout<<"pass #"<<k + 1<<" : "<<password<<endl;//печать на экране
        outFile<<getPassword(length)<<endl;//вывод в файл
    }
    outFile.clear();//сброс ошибок (можно и не делать)
    outFile.close();//закріваем поток записи
}
 
int main()
{
    CPassGen pPass;
    pPass.getPassword();
    return 0;
}
Миниатюры
Генератор паролей  
-=ЮрА=-
10.02.2013, 22:20
  #9

Не по теме:

Цитата Сообщение от makushkin Посмотреть сообщение
std::random_shuffle(password, password + passLenght);
- зачем ещё мешать, выше и так ранд был

Цитата Сообщение от makushkin Посмотреть сообщение
password = new char [passLenght];
- где чистка памяти?Без неё поюзав прогу пару десятков раз с большими длинами паролей можно загадить оперативу. Скажем длина пароля 1024 символа и на каждом запуске делаем 100 паролей, всего пускай сделаем 10 запусков. Утечка памяти составит 100*1024 байт на каждый вызов, т.е на 10 запусков 1000*1024 байт утечки. Во времена Win95 - за такие утечки программиста уволили бы не задумываясь...

abit
11.02.2013, 00:14
  #10

Не по теме:

Скажем длина пароля 1024 символа
ну да, пароль в 1024 символа - обычное дело... у меня правда всего каких-то 11 символов...
ОС по завершению программ сама уничтожит всю память программы, какие бы там жёсткие утечки не были, так что нечего приплетать про 10 запусков подряд, только если в паралель их все запустить и всем по 100 паролей срочно надо и да, со стандартным размером пароля в 1024 символа, я так понимаю вы по 20 минут вводите пароль, или уже тренерованы?

ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
11.02.2013, 00:17     Генератор паролей #11
Цитата Сообщение от makushkin Посмотреть сообщение
std::ofstream outFile(filename); // записываем в кончный файл
не записываем а создаем(открываем файл)
писать мы будем позднее
вот здесь

Цитата Сообщение от makushkin Посмотреть сообщение
outFile << password [i];
abit
11.02.2013, 00:25
  #12

Не по теме:

можно пообщаться с человеком, который слизал 49 репы?

ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
11.02.2013, 00:26     Генератор паролей #13
Цитата Сообщение от abit Посмотреть сообщение
у меня правда всего каких-то 11 символов
ну и сколько вариантов паролей
даже если голые цифры и то 10^11

Цитата Сообщение от abit Посмотреть сообщение
ОС по завершению программ сама уничтожит всю память программы,
до завершения может дело не дойти
перебрать все пароли из одиннадцати цифр даже если на один пароль выделить 1 байт( а их нужно больше)
это уже 100 гигаБайт
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
11.02.2013, 00:38     Генератор паролей #14
Цитата Сообщение от ValeryS Посмотреть сообщение
ну и сколько вариантов паролей
даже если голые цифры и то 10^11


до завершения может дело не дойти
перебрать все пароли из одиннадцати цифр даже если на один пароль выделить 1 байт( а их нужно больше)
это уже 100 гигаБайт
какие цифры? тут речь о символах... если взять только аглийский алфавит и цифры, без знаков пунткуации и русского? это 35^11 = 3500 000 000 000, запустите счётчик в своём любимом компиляторе
for (long long i=0; i!=350000000000000;++i); и наслаждайтесь динамикой процесса, может быть к пенсии подсчитает, а это с учётом а) в цикле он тут ничего не делает вообще, а в условии исходной задачи должен делать, б) обычно стоит защита на если не правильно ввёл пароль несколько раз - подожди минутку минимум... в) пароль то всего 11 значный, а не 1024 значный...

и вообще мне уже плевать, меня за тот пост оштрафовали на больше половины всей репутации - а это между прочим 50 задач решил и помог людям, поэтому я с этого форма сваливаю, ибо есть параграф 6. пункт 11 в правилах, но нигде нет порядка его реализации, одни запреты и фиг знает что... а вам удачи
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
11.02.2013, 00:47     Генератор паролей #15
Цитата Сообщение от abit Посмотреть сообщение
какие цифры? тут речь о символах.
А цифры это не символы?
Цитата Сообщение от abit Посмотреть сообщение
аглийский алфавит и цифры, без знаков пунткуации и русского? это 35
скока скока
10 цифр плюс 26 больших букв плюс 26 маленьких
это 35?
Цитата Сообщение от abit Посмотреть сообщение
35^11 = 350 000 000 000 000,
классно считаешь
Цитата Сообщение от abit Посмотреть сообщение
for (long long i=0; i!=350000000000000;++i); и наслаждайтесь динамикой процесса,
а причем здесь динамика?
ты доказывал наплевать на утечки, система все спишет
при таком цикле
C++
1
2
 for (long long i=0; i!=350000000000000;++i)
     char*c=new char;
программа доживет до конца?
abit
11.02.2013, 04:19
  #16

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
А цифры это не символы?
иди учи теорию множеств, я говорю о подмножествах, ты о об обощениях


программа доживет до конца?
доживёт, даже тебя переживёт...

если тебя забавляют нули - вот посмейся, только сядь для начала:
стандартный пароль на 1024 символа для -*№_)!!!ГЕРОЙ!___---!____ЮРА___ЙОРЕГ!!!!!((*;+"№%*(:

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-=ЮрА=-
Заблокирован
Автор FAQ
11.02.2013, 09:11     Генератор паролей #17
abit, не зарывайся,тебе указывают на твои ошибки,но тебе до одного места видимо. Уймись!
PS:Современные методы брутфорса и аппаратные средства,ломают DES128 за несколько минут,что вынуждает совершенствовать криптоалгоритмы с одновременным увеличднием длинны ключа.Для сверхдлиных ключей пишется ПО код/декод,это ПО и сгенерирует ключ,который вводится програмно либо который потом люди копипастят в поле ввода. (вдруг не знаешь ).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2013, 15:08     Генератор паролей
Еще ссылки по теме:

C++ Генератор паролей
Создать генератор паролей в котором можно указать длину пароля и количество паролей C++
C++ Генератор паролей

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

Или воспользуйтесь поиском по форуму:
beats
 Аватар для beats
98 / 36 / 4
Регистрация: 09.12.2012
Сообщений: 565
11.02.2013, 15:08     Генератор паролей #18
Вот зацените замутил я свой генератор. Проблема в том что после переноса в win forms не работает! выдает просто цифры а не как в консоле!! как быть?
Консольное
C++
1
2
3
4
5
6
char* strID = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz";
    int nLenOfID = strlen(strID);
    srand((unsigned)time(NULL));
    for(int i = 0; i < nLenOfID; i++) {
        cout << strID[rand() % nLenOfID];
    }
Форменное
C++
1
2
3
4
5
6
7
8
9
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
        
    char* strID = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz";
    int nLenOfID = strlen(strID);
    srand((unsigned)time(NULL));
    for(int i = 0; i < nLenOfID; i++) {
        textBox1->Text += strID[rand() % nLenOfID];
    }
             }
Yandex
Объявления
11.02.2013, 15:08     Генератор паролей
Ответ Создать тему
Опции темы

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