Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
LeoRivals
0 / 0 / 0
Регистрация: 04.03.2017
Сообщений: 5
1

Генератор паролей

10.06.2017, 22:42. Просмотров 441. Ответов 7
Метки нет (Все метки)

Представляю Вам генератор паролей на C++. Спасибо пользователю nammidd за помощь в изменении расширения выходного файла.
Описание: Программа генерирует парооли в количестве от 0 до 999999 штук длиной от 0 до 999999 символов. Имя файла для записи может содержать строчные и прописные буквы латинского алфавита, цифры и знак нижнего полдчеркивания.
Вот сам код:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <algorithm>
#include <time.h>
#include <stdlib.h>
#include <fstream>
#include <experimental/filesystem>
 
using std::cout;
using std::cin;
using std::endl;
 
class PassGen {
 
public:
    void displayMessage()
    {
        setlocale(0, "");
        int passLenght;
        int numOfPasswords;
        std::string filename;
 
        cout << endl;
        cout << "                                Генератор паролей" << endl;
        cout << endl;
        cout << "Введите длину пароля для генерации: ";
        cin >> passLenght;
        cout << "Введите количество паролей для генерации: ";
        cin >> numOfPasswords;
        cout << "Введите имя файла для записи: ";
        std::cin >> filename;
        cout << "Началась генерация паролей. " << endl;
 
 
        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 << numOfPasswords << " паролей было сгенерировано и записано в файл " << filename << "." << endl;
        std::experimental::filesystem::path p(filename);
        rename(p, std::string(filename) + ".txt");
        cout << "Расширение фалйа " << filename << " было изменено на " << filename << ".txt." << endl;
        cout << "Работа программы успешно завершена. " << 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;
}

Скачать скомпилированный файл можно тут:
Кликните здесь для просмотра всего текста
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2017, 22:42
Ответы с готовыми решениями:

Создать генератор паролей в котором можно указать длину пароля и количество паролей
Помогите пожалуйста! Задание: Нужно создать генератор паролей в котором можно...

Генератор паролей
1. В таблице 1 найти требования, которым должен удовлетворять генератор...

генератор паролей
кто нибудь может показать программку генератор паролей?

Генератор паролей
Кто может чётко написать коментарии для генератора паролей Просто я учусь...

Генератор паролей
Привет юзерам cyberforum'а. Требуется следующее: Написать программу -...

7
MihaelK
20 / 20 / 9
Регистрация: 25.11.2016
Сообщений: 105
10.06.2017, 22:49 2
обычный не секуюрный рандом да еще и без гуи? серьёзно? еще и бинарник с малварем качать.
чем, например, http://genpas.peter23.com/ не угодил?
0
notAll
456 / 175 / 64
Регистрация: 27.05.2016
Сообщений: 461
Завершенные тесты: 2
11.06.2017, 13:25 3
Мне больше такой генератор нравиться:
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
#include <iostream>
#include <vector>
#include <random>
#include <chrono>
#include <utility>
 
int main()
{
    static std::mt19937 gen(std::chrono::high_resolution_clock::now().time_since_epoch().count());
    const std::size_t pass_size = 20;
    std::vector<std::pair<std::uniform_int_distribution<>, std::size_t>> symbols =
            {
                {std::uniform_int_distribution<>('a', 'z'), 28}, //26 symbs
                {std::uniform_int_distribution<>('A', 'Z'), 28}, //26
                {std::uniform_int_distribution<>('0', '9'), 12}, //10
                {std::uniform_int_distribution<>('!', '/'), 15}, //15
                {std::uniform_int_distribution<>(':', '@'), 7}, //7
                {std::uniform_int_distribution<>('[', '`'), 6}, //6
                {std::uniform_int_distribution<>('{', '~'), 4}  //4
            };
 
    std::vector<std::size_t> probabilities;
    for (const auto& u : symbols)
        probabilities.push_back(u.second);
 
    std::discrete_distribution<> dd(probabilities.cbegin(), probabilities.cend());
 
    std::string pass;
    for (std::size_t i = 0; i < pass_size; ++i)
        pass.push_back(static_cast<char>(symbols[dd(gen)].first(gen)));
 
    std::cout << pass << std::endl;
}
1
LeoRivals
0 / 0 / 0
Регистрация: 04.03.2017
Сообщений: 5
11.06.2017, 15:34  [ТС] 4
Цитата Сообщение от MihaelK Посмотреть сообщение
обычный не секуюрный рандом да еще и без гуи? серьёзно? еще и бинарник с малварем качать.
чем, например, http://genpas.peter23.com/ не угодил?
Бинарник без вирусов. Можете проверить сами. http://genpas.peter23.com/ не угодил тем, что он онлайн, а мне нужен офлайн.

Добавлено через 13 минут
x86
Кликните здесь для просмотра всего текста
sha256 1D58738B27F82DEB7568EDFF4981DC664897C40C03F42CEA408C28BDD56CCCD5 VirusTotal

x64
Кликните здесь для просмотра всего текста
sha256 8B5BEC32CF38ACE657F424F27A11C0334937DCDC8E9F9F03959AA81EEB962722 ViruusTotal


Добавлено через 6 минут
Цитата Сообщение от notAll Посмотреть сообщение
Мне больше такой генератор нравиться: ...
Вы его компилировали?
0
MihaelK
20 / 20 / 9
Регистрация: 25.11.2016
Сообщений: 105
11.06.2017, 18:22 5
Цитата Сообщение от LeoRivals Посмотреть сообщение
не угодил тем, что он онлайн, а мне нужен офлайн.
что мешает его скачать к себе на компьютер?
0
notAll
456 / 175 / 64
Регистрация: 27.05.2016
Сообщений: 461
Завершенные тесты: 2
11.06.2017, 18:41 6
Цитата Сообщение от LeoRivals Посмотреть сообщение
Вы его компилировали?
Конечно: https://wandbox.org/permlink/vSxvLAMlU0zoI94m
0
hoggy
Заблокирован
Эксперт С++
11.06.2017, 22:19 7
Цитата Сообщение от notAll Посмотреть сообщение
Мне больше такой генератор нравиться:
ваш генератор не нравится gcc.

Код
source_file.cpp:9:97: warning: conversion to ‘std::mersenne_twister_engine<long unsigned int, 32ul, 624ul, 397ul, 31ul, 2567483615ul, 11ul, 4294967295ul, 7ul, 2636928640ul, 15ul, 4022730752ul, 18ul, 1812433253ul>::result_type {aka long unsigned int}’ from ‘std::chrono::duration<long int, std::ratio<1l, 1000000000l> >::rep {aka long int}’ may change the sign of the result [-Wsign-conversion]
     static std::mt19937 gen(std::chrono::high_resolution_clock::now().time_since_epoch().count());
                                                                                                 ^
source_file.cpp:30:57: warning: conversion to ‘std::vector<std::pair<std::uniform_int_distribution<>, long unsigned int> >::size_type {aka long unsigned int}’ from ‘std::discrete_distribution<>::result_type {aka int}’ may change the sign of the result [-Wsign-conversion]
         pass.push_back(static_cast<char>(symbols[dd(gen)].first(gen)));
                                                         ^
0
notAll
456 / 175 / 64
Регистрация: 27.05.2016
Сообщений: 461
Завершенные тесты: 2
12.06.2017, 22:51 8
fixed
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
#include <iostream>
#include <vector>
#include <random>
#include <chrono>
#include <utility>
 
int main()
{
    static std::mt19937 gen(static_cast<std::mt19937::result_type>(std::chrono::high_resolution_clock::now().time_since_epoch().count()));
    const std::size_t pass_size = 20;
    std::vector<std::pair<std::uniform_int_distribution<>, std::size_t>> symbols =
            {
                {std::uniform_int_distribution<>('a', 'z'), 28}, //26 symbs
                {std::uniform_int_distribution<>('A', 'Z'), 28}, //26
                {std::uniform_int_distribution<>('0', '9'), 12}, //10
                {std::uniform_int_distribution<>('!', '/'), 15}, //15
                {std::uniform_int_distribution<>(':', '@'), 7}, //7
                {std::uniform_int_distribution<>('[', '`'), 6}, //6
                {std::uniform_int_distribution<>('{', '~'), 4}  //4
            };
 
    std::vector<std::size_t> probabilities;
    for (const auto& u : symbols)
        probabilities.push_back(u.second);
 
    std::discrete_distribution<std::size_t> dd(probabilities.cbegin(), probabilities.cend());
 
    std::string pass;
    for (std::size_t i = 0; i < pass_size; ++i)
        pass.push_back(static_cast<char>(symbols[dd(gen)].first(gen)));
 
    std::cout << pass << std::endl;
}
1
12.06.2017, 22:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2017, 22:51

Генератор паролей
нужно сгенерировать пароль хотя что бы большие латинские буквы, Коды...

Генератор паролей
Здравствуйте! Мне нужна ваша помощь! Мне нужно, чтобы пароли которые я...

Генератор паролей на C++
Пока регистрировался на сайте задумался о генераторе паролей и решил написать...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru