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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
#1

Генератор пароля. Оцените его компактность и непредсказуемость - C++

03.02.2014, 09:09. Просмотров 691. Ответов 15
Метки нет (Все метки)

Сделал за 10 минут генератор. Оцените компактность и непредсказуемость(рандомность) пароля, пожалуйста
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
#include<conio.h>
#include<iostream>
#include<time.h>
using namespace std;
 
int main(){
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
    const int N = 30;
    int c;
    char Password[N];
    int q;
    cout<<"\t\tГенератор пароля(до 30 символов)\n\n";
    cout<<"Введите кол-во символов для генерации: ";
    cin>>c;
    for(int i(0); i < c; i++){
        q = (rand()%3);
        if(q == 0)
        Password[i] = (char) (rand() % 26) + 65;
        else if(q == 1)
        Password[i] = (char) (rand() % 26) + 97;
        else
        Password[i] = (char) (rand() % 10) + 48;
    }
    for(int i(c); i < N; i++)
        Password[i] = '\0';
    cout<<"\n\nВаш новый пароль: ";
    for(int i(0); i < c; i++)cout<<Password[i];
    cout<<"\n\nДля выхода нажмите любую клавишу...";
    _getch();
    return 0;
}

Не по теме:

И подскажите как копировать в буфер обмена

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2014, 09:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Генератор пароля. Оцените его компактность и непредсказуемость (C++):

Генератор пароля - C++
Напишите функцию, которая случайным образом генирирует пароль из 8 символов. В пароле должны присутствовать только латинские буквы и цифры ...

Генератор пароля - C++
Помогите пожалуйста написать генератор паролей в С++, условие: 26 символов - ограничение, должен состоять из малых английских букв,...

Генератор пароля - C++
Добрый вечер. Нужно написать программу-генератор паролей. Программа должна выполнять следующие действия: a) Ввод идентификатора...

Разработать генератор одноразового пароля - C++
Помогите пожалуйста разработать генератор одноразового пароля на основе псевдослучайного выбора символов из данных, введенных...

Как реализовать генератор пароля? - C++
условия: 1.выбор длина 2.Выбор букв(заглавные или нет \ или оба) 3. Выбирать Число или нет 4.Выбирать символы или нет //...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Петррр
5958 / 3395 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
03.02.2014, 09:16 #2
Цитата Сообщение от Xopecc Посмотреть сообщение
И подскажите как копировать в буфер обмена
http://stackoverflow.com/questions/1...clipboard-in-c
0
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
03.02.2014, 09:18  [ТС] #3
Петррр, а что-то на русском есть ? английский не до конца понимаю
0
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,998
03.02.2014, 09:22 #4

Не по теме:

Цитата Сообщение от Xopecc Посмотреть сообщение
Петррр, а что-то на русском есть ? английский не до конца понимаю
учите, очень пригодится, гуглпереводчик в помощь и вперёд - переводить)


попробуйте в QT сделать этот генератор, будет программа с GUI =)
0
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
03.02.2014, 09:41  [ТС] #5
dzrkot, хотел в Windows Forms сделать, вот результат
0
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,998
03.02.2014, 09:46 #6
Цитата Сообщение от Xopecc Посмотреть сообщение
dzrkot, хотел в Windows Forms сделать, вот результат
не могу помочь, сам пока тыкаюсь только в QT, формы особо не трогал за ненадобностью)
0
Ev_Hyper
Заблокирован
03.02.2014, 10:07 #7
Цитата Сообщение от dzrkot Посмотреть сообщение
попробуйте в QT сделать этот генератор, будет программа с GUI =)
Вот-вот. Тем более сложности нет: батон, текстедит, и что нибудь для количества + диапазона.

Цитата Сообщение от Xopecc Посмотреть сообщение
хотел в Windows Forms сделать, вот результат
код выкладывайте.
0
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,998
03.02.2014, 10:10 #8
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
и что нибудь для количества
QSpinBox можно)
0
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
03.02.2014, 12:45  [ТС] #9
Ev_Hyper, в WindowsForm я только создаю программу(пустое окно) и она уже не работает, по ссылке есть видео-результат...

Добавлено через 2 часа 17 минут
dzrkot, С WindowsForm проблему решил:

Не по теме:

Помогло удаление из проекта файла app.rc


Сейчас попробую наваять генератор с GUI
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.02.2014, 13:47 #10
Еще такой генератор в стиле С++11:
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
#include <iostream>
#include <random>
#include <chrono>
#include <ctime>
 
int main()
{
   //std::default_random_engine gen(std::chrono::system_clock::now().time_since_epoch().count());
   //std::mt19937 gen {std::chrono::system_clock::now().time_since_epoch().count() }; // gen.seed(time(0));
   std::mt19937 gen { static_cast<unsigned>(std::time(nullptr)) };
   std::vector<std::uniform_int_distribution<> >  ascii =
   {
      std::uniform_int_distribution<>('a', 'z'), //0
      std::uniform_int_distribution<>('A', 'Z'), //1
      std::uniform_int_distribution<>('0', '9'), //2
      std::uniform_int_distribution<>(':', '@'), //3
      std::uniform_int_distribution<>('[', '`'), //4
      std::uniform_int_distribution<>('{', '~'), //5
      std::uniform_int_distribution<>(0, 5)      //6
   };
 
   for(std::size_t i = 0; i < 60; ++i)
      std::cout << static_cast<char>(ascii[ascii[6](gen)](gen));
 
   std::cout << std::endl;
   return 0;
}
0
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
03.02.2014, 14:17  [ТС] #11
DiffEreD, можно, но он менее простой, нежели мой Да и новички в твоем(может и не твоем) коде не разберутся !
0
Убежденный
Системный программист
Эксперт С++
15557 / 7065 / 1115
Регистрация: 02.05.2013
Сообщений: 11,475
Завершенные тесты: 1
03.02.2014, 14:58 #12
Цитата Сообщение от Xopecc Посмотреть сообщение

Оцените компактность и непредсказуемость(рандомность) пароля

C++
1
srand(time(NULL));
Вы уж меня простите за занудство (работа такая - быть занудным), но здесь
отсутствует одно из главных качеств пароля - непредсказуемость.

time возвращает к-во секунд, прошедших с определенной даты (1970).
Если злоумышленнику известен алгоритм генерации пароля, и он знает хотя бы
примерное время, когда этот пароль был сгенерирован, тогда у него есть все
шансы узнать его простым перебором. Например, если он знает, что пароль был
сгенерирован между 12:00 и 13:00 3 февраля 2014 года, то достаточно перебрать
3600 секунд * 30 символов = 108000 комбинаций, подаваемых в srand, чтобы
получить исходное состояние генератора случайных чисел, используемого в rand.
На современных компьютерах это займет не больше секунды.

Нужно "подмешать" в srand хоть какой-то энтропии, например ID потока, состояние
регистров CPU, позицию указателя мыши и т.д. Тогда вероятность найти пароль
простым перебором значительно снижается.
2
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
03.02.2014, 15:45  [ТС] #13
Убежденный, воу, я об этом и не задумывался Пойду почитаю, может к вечеру накину чего нового, выложу на ваше оценивание !

Добавлено через 33 минуты
Убежденный, я что-то srand вообще не понимаю, она у меня не принимает никакого значения кроме NULL(0)... Объясните, из-за чего это

Добавлено через 9 минут
Убежденный,
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
#include<conio.h>
#include<iostream>
#include<time.h>
using namespace std;
 
int main(){
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
    unsigned int x = rand() % 10000;
    srand(x);
    unsigned int y = rand() % x;
    srand(y);
    unsigned int z = rand() % y;
    srand(z);
    unsigned int w = rand() % (x*y*z);
    srand(w);
    const int N = 30;
    int c;
    char Password[N];
    int q;
    cout<<"\t\tГенератор пароля(до 30 символов)\n\n";
    cout<<"Введите кол-во символов для генерации: ";
    cin>>c;
    for(int i(0); i < c; i++){
        q = (rand()%3);
        if(q == 0)
        Password[i] = (char) (rand() % 26) + 65;
        else if(q == 1)
        Password[i] = (char) (rand() % 26) + 97;
        else
        Password[i] = (char) (rand() % 10) + 48;
    }
    for(int i(c); i < N; i++)
        Password[i] = '\0';
    cout<<"\n\nВаш новый пароль: ";
    for(int i(0); i < c; i++)cout<<Password[i];
    cout<<"\n\nДля выхода нажмите любую клавишу...";
    _getch();
    return 0;
}
Поколдовал с функцией srand, еще реально быстро подобрать пароль?

Не по теме:

я что-то srand вообще не понимаю, она у меня не принимает никакого значения кроме NULL(0)... Объясните, из-за чего это
ахаха, забыл удалить srand(time(NULL)), всегда подставлял значение в значение времени

0
Убежденный
Системный программист
Эксперт С++
15557 / 7065 / 1115
Регистрация: 02.05.2013
Сообщений: 11,475
Завершенные тесты: 1
03.02.2014, 15:59 #14
Цитата Сообщение от Xopecc Посмотреть сообщение
Поколдовал с функцией srand, еще реально быстро подобрать пароль?
Реально.
У Вас srand всегда выполняется с time(NULL), а все последующие srand-ы
зависят от самой первой. На успех атаки полным перебором это никак не влияет.

Надо что-то типа такого:
C++
1
2
3
4
5
6
srand(
    текущее_время ^
    позиция_указателя_мыши ^
    состояние_регистров_CPU ^
    прочая_чушь_которую_трудно_предсказать
);
0
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
03.02.2014, 17:03  [ТС] #15
Убежденный, у функции srand может быть больше 1-ого аргумента? не знал, щас еще что-нибудь попробую
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2014, 17:03
Привет! Вот еще темы с ответами:

Оценка безопасности пароля путем перебора пароля из словаря - C++
Разработать программное обеспечение для оценки степени безопасности паролей пользователей. Я уже скачал пару словарей паролей из...

При смене пароля выдается сообщение, и его выкидывает на окно смены пароля - Администрирование Windows
При создании нового пользователя ему выдается временный пароль, который нужно сменить при первом входе. На нескольких машинах обнаружилась...

Генератор пароля - PHP
Приветствую. Решил тут написать функцию сабжа, но что то хлам какой то неработоспособный получается: function TestRandStr($num = 8) ...

Генератор пароля пользователей - Pascal
Реализовать программу – генератор паролей пользователей. Программа должна формировать случайную последовательность символов длины L = 6,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.02.2014, 17:03
Ответ Создать тему
Опции темы

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