82736

РАЗРАБОТКА ПРОГРАММЫ, ГЕНЕРИРУЮЩЕЙ ПАРОЛИ ПОЛЬЗОВАТЕЛЕЙ

Курсовая

Информатика, кибернетика и программирование

Целью работы является разработка программы которая генерирует пароли пользователей с учетом количественных оценок стойкости пароля. В процессе курсового проектирования были рассчитаны количественные оценки стойкости пароля разработан алгоритм программы генерирующей пароли разработана...

Русский

2015-03-02

817 KB

13 чел.

Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное

учреждение высшего профессионального образования

«Пензенский государственный университет»

Кафедра "Информационная безопасность систем и технологий"

 

ОТЧЕТ

О КУРСОВОМ ПРОЕКТЕ

по теме:

«РАЗРАБОТКА ПРОГРАММЫ, ГЕНЕРИРУЮЩЕЙ ПАРОЛИ ПОЛЬЗОВАТЕЛЕЙ»

Руководитель КП                                                  _______________ А.Г. Фатеев  

Исполнитель КП                                                   _______________ В.В. Костин

Пенза 2013

РЕФЕРАТ

Отчет о курсовом проекте содержит 44 страницы, 14 рисунков,  2 источника, 2 приложения.

ПАРОЛЬНАЯ СИСТЕМА, ГЕНЕРАТОР ПАРОЛЕЙ, СЛОВАРЬ ПАРОЛЕЙ, ДЛИНА ПАРОЛЯ, ПАРОЛЬ, ВЫРОЖДЕННОСТЬ ПАРОЛЯ

Объектом исследования курсового проекта является программа, которая генерирует пароли пользователей.

Целью работы является разработка программы, которая генерирует пароли пользователей с учетом количественных оценок стойкости пароля.

В процессе курсового проектирования были рассчитаны количественные оценки стойкости пароля, разработан алгоритм программы, генерирующей пароли, разработана программа, генерирующая пароли пользователей, была произведена экспериментальная проверка функционирования программы.

Результатом выполнения курсового проекта является программа, генерирующая пароли и проверяющая их на вырожденность, по журналу истории и по словарям.


СОДЕРЖАНИЕ


ЗАДАНИЕ

ВВЕДЕНИЕ

Как показывает многолетний опыт компаний, занимающихся проведением тестирований на проникновение и аудитов информационной безопасности, зачастую, слабая парольная политика или повсеместное ее несоблюдение приводит к возможности компрометации различных участков информационной системы, и как следствие, позволяет реализовать несанкционированный доступ к информации различного уровня критичности.

Парольная система представляет собой "передний край обороны" всей системы безопасности. Некоторые ее элементы могут быть расположены в местах, открытых для доступа потенциальному злоумышленнику. Поэтому парольная система становится одним из первых объектов атаки при вторжении злоумышленника в защищенную систему. Типами угроз безопасности парольных систем могут быть: разглашение параметров учетной записи и вмешательство в функционирование компонентов парольной системы.

Данная проблема делает актуальным создание программ для автоматического генерирования паролей пользователей, имеющих высокую степень надежности.

В этом отчете по курсовому проекту представлен пример разработки таких программ под заданные характеристики надежности пароля. Применение этих программ для автоматического генерирования паролей пользователей позволяет повысить защищенность парольных систем.

1 Применение парольных систем

Наиболее распространенные методы аутентификации основаны на применении многоразовых или одноразовых паролей. Из-за своего широкого распространения и простоты реализации парольные схемы часто в первую очередь становятся мишенью атак злоумышленников. Эти методы включают следующие разновидности способов аутентификации:

- по хранимой копии пароля или его свёртке;

- по некоторому проверочному значению;

- без непосредственной передачи информации о пароле проверяющей стороне;

- с использованием пароля для получения криптографического ключа.

В первую разновидность способов входят системы аутентификации, предполагающие наличие у обеих сторон копии пароля или его свертки. Для организации таких систем требуется создать и поддерживать базу данных, содержащую пароли или сверки паролей всех пользователей. Их слабой стороной является то, что получение злоумышленником этой базы данных позволяет ему проходить аутентификацию от имени любого пользователя.

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

Наконец, аутентификация без предоставления проверяющей стороне какой бы то ни было информации о пароле обеспечивает наибольшую степень защиты. Этот способ гарантирует безопасность даже в том случае, если нарушена работа проверяющей стороны.

Особым подходом в технологии проверки подлинности являются криптографические протоколы аутентификации. Такие протоколы описывают последовательность действий, которую должны совершить стороны для взаимной аутентификации, кроме того, эти действия, как правило, сочетаются с генерацией и распределением криптографических ключей для шифрования последующего информационного обмена. Корректность протоколов аутентификации вытекает из свойств задействованных в них математических и криптографических преобразований и может быть строго доказана.

Обычные парольные системы проще и дешевле для реализации, но менее безопасны, чем системы с криптографическими протоколами. Последние обеспечивают более надежную защиту и дополнительно решают задачу распределения ключей. Однако используемые в них технологии могут быть объектом законодательных ограничений.

Основными компонентами парольной системы являются:

- интерфейс пользователя;

- интерфейс администратора;

- модуль сопряжения с другими подсистемами безопасности;

- база данных учетных записей [1].


2 Определение количественных оценок стойкости пароля

Из текущего варианта задания, скорость подбора паролей 2×106 паролей в секунду, длина пароля L равно 8 символов, а время непрерывного подбора пароля T равно 172800 секунд. Мощность алфавита паролей, состоящего из строчных (A, B, C,..., Z) и прописных (a, b, c,..., z) латинских букв, цифр (от 0 до 9) и специальных символов, составляет A равное 93 символа.

Вероятность подбора пароля Р определяется по формуле:

где:

- V – скорость подбора паролей;

- T – срок действия пароля;

- S – мощность пространства паролей (S равно AL).

Таким образом, вероятность подбора пароля Р равно 6×10-5.


3 Разработка алгоритма программы, генерирующей пароли пользователей

При запуске программы происходит проверка наличия журнала паролей, если он существует, программа выводит путь к нему.  При нажатии на кнопку генерировать, программа определяет введенную длину пароля (если она не введена, длина пароля автоматически будет установлена в 8 символов), выбранные для генерации символы и выбранные проверки. Алгоритм работы программы приведет в приложении А, рисунок А.1.

Функция генерации пароля реализована следующим образом. Программа определяет какие группы символов выбраны для генерации. Формирует из них строку алфавита пароля и передает её и длину пароля, как входные значения для функции генерации. Формируется случайное число, в пределах мощности алфавита пароля,  из алфавита пароля выбирается символ стоящей на позиции, соответствующей случайному числу, и добавляется в строку пароля. Так происходит, пока количество символов в пароле не достигнет значения длины пароля, заданного пользователем. После достижения длины пароля, равной введенному значению, происходи выход из функции. Алгоритм работы генератора представлен в приложении А, рисунок А.2

Функции проверки пароля. Если  проверка по журналу не выбрана, то программа переходит к проверке по словарю. Иначе программа построчно считывает  пароли, находящиеся в журнале и сравнивает с проверяемым паролем. Если совпадений не найдено, то программа переходит к проверке по словарю и счетчик увеличивается на 1. Если словарь не указан, то выдается сообщение о  необходимости указать словарь или отключить проверку по нему. Если словарь указан, то программа открывает его и  построчно сравнивает сгенерированный или введенный пароль с паролями, находящимися в словаре.  Если совпадений не найдено, то счетчик увеличивается 1 и программа переходит к проверке на вырожденность. При проверке на вырожденность в программе подсчитывается количество совпадающих символов, и если оно больше 1, то пароль считается вырожденным. Если после завершения проверок счетчик равен 3, выдается сообщение об успешности проверок, иначе выдается сообщение о том, что проверка не прошла. Алгоритм работы функции проверки представлен в приложении А, рисунки  А.3, А.4 и А.5.


4 Разработка программы, генерирующей пароли пользователей

Для того, чтобы реализовать данный алгоритм, использовался Embarcadero RAD Studio XE4 С++ Builder - интегрированная среда для разработки и программированию приложений на языке С++.

При создании формы программы, после её запуска, вызывается функция FormCreate:

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Char buffer[255];

String s;

GetCurrentDirectory(sizeof(buffer),buffer);

s=buffer;

s=s+"\\jornal.txt";

std::ofstream out("jornal.txt",std::ios::in);

if (out) {

Edit1->Text=s;

}

}

Функция пытается открыть файл журнала , если он не существует отображает в окне программы путь к файлу журнала.

При нажатии в программе на кнопку «Генерировать» вызывается функция Button3Click :

void __fastcall TForm1::Button3Click(TObject *Sender)

{

String DlP;   String par;

DlP=Edit3->Text;

int dl;

dl=DlP.ToIntDef(8);

if (dl>8) {

 dl=8;

 Application->MessageBox(L"Недопустимая длина пароля! Длина пароля установлена в 8 символов.", L"Генератор паролей", MB_OK|MB_ICONINFORMATION);

 Edit3->Text=dl;

}

String sim="";

if (CheckBox1->Checked==true) {

 sim+="ASDFGHJKLZXCVBNMQWERTYUIOP";

}

if (CheckBox2->Checked==true) {

 sim+="0123456789";

}

if (CheckBox3->Checked==true) {

 sim+="asdfghjklzxcvbnmqwertyuiop";

}

if (CheckBox4->Checked==true) {

 sim+="~`!@#$%^&*()_-+={}[]:;<,>.?\/|";

}

if (sim.Length()<1) {

Application->MessageBox(L"Не указаны символы для генерации!", L"Генератор паролей", MB_OK|MB_ICONERROR);

}  else {

par=Generation(sim,dl);

Edit4->Text=par;

 }

int cheker=0; int prov_num=0;

if (CheckBox5->Checked==true) {

String path_j;

prov_num++;

path_j=Edit1->Text;

if (path_j.Length()<1) {

  Application->MessageBox(L"Не указан журнал!", L"Проверка по журналу", MB_OK|MB_ICONERROR);

} else {

 if (Prov_jorn(path_j,par)==0) {

  cheker++;

  Application->MessageBox(L"Нет совпадений с журналом.", L"Проверка по журналу", MB_OK|MB_ICONINFORMATION);

 }

 if (Prov_jorn(path_j,par)==1) {

    Application->MessageBox(L"Невозможно открыть журнал!", L"Проверка по журналу", MB_OK|MB_ICONERROR);

 }

 if (Prov_jorn(path_j,par)==2) {

    Application->MessageBox(L"Совпадение с журналом!", L"Проверка по журналу", MB_OK|MB_ICONERROR);

 }

}

}

if (CheckBox6->Checked==true) {

String path_s;

prov_num++;

path_s=Edit2->Text;

if (path_s.Length()<1) {

  Application->MessageBox(L"Не указан словарь!", L"Проверка по словарю", MB_OK|MB_ICONERROR);

} else {

 if (Prov_slov(path_s,par)==0) {

  cheker++;

  Application->MessageBox(L"Нет совпадений со словарем.", L"Проверка по словарю", MB_OK|MB_ICONINFORMATION);

 }

 if (Prov_slov(path_s,par)==1) {

    Application->MessageBox(L"Невозможно открыть словарь!", L"Проверка по словарю", MB_OK|MB_ICONERROR);

 }

 if (Prov_slov(path_s,par)==2) {

    Application->MessageBox(L"Совпадение со словарем!", L"Проверка по словарю", MB_OK|MB_ICONERROR);

 }

}

}

if (CheckBox7->Checked==true) {

 prov_num++;

 if (Prov_vir(par)==0) {

  cheker++;

  Application->MessageBox(L"Пароль не вырожденный.", L"Проверка на вырожденность", MB_OK|MB_ICONINFORMATION);

 }

 if (Prov_vir(par)==1) {

    Application->MessageBox(L"Пароль вырожденный!", L"Проверка на вырожденность", MB_OK|MB_ICONERROR);

 }

}

if (cheker==prov_num) {

String path_j;

path_j=Edit1->Text;

if (path_j.Length()<1) {

  Application->MessageBox(L"Не указан журнал!", L"Запись в журнал", MB_OK|MB_ICONERROR);

} else {

   if (Jorn_zap(par,path_j)==true){

   Application->MessageBox(L"Пароль добавлен в журнал.", L"Запись в журнал", MB_OK|MB_ICONINFORMATION);

  } else {

  Application->MessageBox(L"Не удалось открыть журнал!", L"Запись в журнал", MB_OK|MB_ICONERROR);

  }

}

}

}

Функция считывает введенную пользователем длину пароля, проверяет соответствие введенной длины пароля  максимальной и минимальной допустимой длине, определяет выбранные для генерации группы символов. Формирует из выбранных групп символов строку алфавита пароля. Вызывает функция генератора Generation, предавая как входные значения, длину пароля и строку алфавита. После определяется какие были выбраны проверки  и вызываются соответствующие функции. При успешном прохождении выбранных проверок, сгенерированный пароль добавляется в журнал.

Для генерации пароля используется функция Generation:

String Generation(AnsiString sim, int dl)

{

AnsiString par;

int ln;

ln=sim.Length();

for (int i = 0; i < dl; i++) {

par+=sim[random(ln)+1];

}

return par;

}

В качестве входного значения в функцию передается необходимая длина пароля и строка алфавита пароля. Функция определяет длину строки символов для генерации пароля. В цикле от 1 до длины пароля, функция получает случайное число в диапазоне от 1 до длины строки символов для генерации пароля, выбирает из этой строки символ из позиции с соответствующим номером и добавляет символ в строку пароля.

Функция проверки по журналу Prov_jorn:

int Prov_jorn(AnsiString path, AnsiString pr)

{

std::ifstream in(path.c_str(),std::ios::in);

 char ch[255];

 String r;   int k=0,d=0;

 if (!in)

 {return 1;}

 else d++;

 if(d!=0)

 {

  while (! in.eof ())

  {

  in>>ch;

  r=ch;

  if (r==pr)

  {

   k++;

   break;

  }

 }

 in.close();

 if (k==0) {

  return 0;

 }  else { return 2;}

 }

}

Функция получает входящим параметром проверяемый пароль и путь к журналу. Из файла журнала построчно считываются пароли и сравниваются с проверяемым паролем. Если совпадений не было функция возвращает 0, если совпадения были 2, если журнал не найден 1.

Функция проверки по словарю Prov_slov:

int Prov_slov(AnsiString path, AnsiString pr)

{

std::ifstream in(path.c_str(),std::ios::in);

 char ch[255];

 String r;   int k=0,d=0;

 if (!in)

 {return 1;}

 else d++;

 if(d!=0)

 {

  while (! in.eof ())

  {

  in>>ch;

  r=ch;

  if (r==pr)

  {

   k++;

   break;

  }

 }

 in.close();

 if (k==0) {

  return 0;

 }  else { return 2;}

 }

}

Функция получает входящим параметром проверяемый пароль и путь к словарю. Из файла словаря построчно считываются пароли и сравниваются с проверяемым паролем. Если совпадений не было функция возвращает 0, если совпадения были 2, если журнал не найден 1.

Функция проверки на вырожденность Prov_vir:

bool Prov_vir(AnsiString pr)

{

int sim[8];

for (int i = 1; i < pr.Length()+1; i++) {

for (int j = 1; j < pr.Length()+1; j++) {

 if (pr[i]==pr[j]) {

  sim[i]++;

 }

}

}

int schet;

for (int i = 1; i < pr.Length()+1; i++) {

if (sim[i]>1) {

 return false;

}

}

return true;

}

Функция подсчитывает, сколько раз символ встречается в пароле. Если хоть один символ встречается больше одного раза, пароль считается вырожденным.

При нажатии кнопки «Указать» вызывается функция выбора файла словаря Button2Click:

void __fastcall TForm1::Button2Click(TObject *Sender)

{

String s;

OpenDialog1->Execute();

s=OpenDialog1->FileName;

Edit2->Text=s;

}

Функция вызывает стандартный диалог открытия файлов, из него получает путь к указываемому словарю и отображает путь к словарю в окне программы.

При нажатии кнопки «Создать» вызывается функция создания файла журнала Button1Click:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

std::ofstream out("jornal.txt",std::ios::app);

Char buffer[255];

String s;

GetCurrentDirectory(sizeof(buffer),buffer);

s=buffer;

s=s+"\\jornal.txt";

Edit1->Text=s;

}

Функция проверяет наличие файла журнала (если он отсутствует функция создает его), получает путь к директории программы, формирует путь к журналу и выводит его в окно программы.

Функция добавление файла в журнал Jorn_zap:

bool Jorn_zap(String par, String path)

{

std::ifstream in(path.c_str(),std::ios::in);

   if (!in)

 {return false;}

FILE *f;

f = fopen("jornal.txt","a");

fprintf(f,"%S\n",par);

fclose (f);

return true;

}

Функция проверяет наличие файла журнала, если он существует, записывает в него переданный пароль и возвращает истину.

Весь исходный текст программы представлен в Приложении Б.


5 Экспериментальная проверка функционирования программы, генерирующей пароли пользователей

Для генерации пароля необходимо выбрать его длину. Пример сгенерированного пароля, длиной 8 символов приведен на рисунке  1.

Рисунок 1 - Генерация с заданной длинной

Если в поле длины пароля значение введено не будет, то программа установит длину генерируемого пароля в 8 символов. Пример приведен на рисунке 2.

Рисунок 2 - Генерация без указания длинны

По заданию длина пароля должна варьироваться от 1 до 8 символов. При вводе в окно программы значения длины пароля, не совпадающего с заданием, программа устанавливает длину пароля в 8 символов. Пример некорректного ввода длины приведен на рисунке 3 и рисунке 4.

Проверка пароля по журналу выполняется посредством сравнения сгенерированного пароля с содержимым журнала.  Если пароль совпадает с журналом, то выдается сообщение об ошибке и предлагается сгенерировать пароль заново (см. рисунок 5), в противном случае выдается сообщение об отсутствии совпадений и пароль заносится в журнал (см. рисунок 6). При отсутствии журнала созданных паролей, программа создает его автоматически.

Рисунок 3 - Генерация больше длины по умолчанию

Рисунок 4 - Генерация меньше минимальной длины

Рисунок 5 – Совпадение пароля с журналом

Рисунок 6  - Проверка по журналу

Проверка по словарю выполняется посредством сравнения пароля с пароля из файла словаря, указанном в программе. Если пароль совпадает со словарем, то выдается сообщение об ошибке (программа при проверках ни разу не сгенерировала пароль содержащийся в словаре), в противном случае выдается сообщение об отсутствии совпадений (см. рисунок 7). В случае, если в программе не указан путь к словарю, то  программа выдает сообщение о необходимости указать словарь, либо отменить проверку (см. рисунок 8).

Рисунок 7 – Отсутствие совпадений со словарем

При проверке на вырожденность программа считает количество совпадающих символов в пароле. Если данное количество равно 1, то пароль можно использовать, иначе необходимо повторить генерацию. Пример проверки пароля на вырожденность приведен на рисунке 9.

Рисунок 8 – Сообщение при отсутствии пути к словарю

Рисунок 9 - Проверка на вырожденность

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


ЗАКЛЮЧЕНИЕ

В ходе выполнения курсового проекта была разработана программа, формирующая пароли и выполняющая следующие функции:

- генерации паролей заданной длины из алфавита, состоящего из строчных и прописных латинских букв, цифр и специальных символов;

- проверки пароля на вырожденность, по журналу истории и по словарям.

Таким образом, все требования задания на курсовой проект были выполнены в полном объеме.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1.  SecurityLab [электронный ресурс]. Режим доступа: http://www.securitylab.ru/analytics/381943.php, свободный. – Анализ проблемы парольной защиты. – Язык русский.
  2.   Scribd [электронный ресурс]. Режим доступа: http://ru.scribd.com/doc/70342325/1/, свободный. – Методы и средства защиты компьютерной информации. – Язык русский.


ПРИЛОЖЕНИЕ А

(обязательное)

Алгоритмы программы


 

Рисунок А.1.Лист 1 – Общий алгоритм работы программы

Рисунок А.1.Лист 2


Рисунок А.2 – Алгоритм работы генератора


Рисунок А.3– Алгоритм проверки пароля по словарю


Рисунок А.4– Алгоритм проверки пароля на вырожденность


Рисунок А.5– Алгоритм проверки пароля по журналу


ПРИЛОЖЕНИЕ Б

(обязательное)

Исходный текст программы


//---------------------------------------------------------------------------

#include <vcl.h>

#include <windows.h>

#include <stdlib.h>

#include <fstream>

#include <iostream>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

String Generation(AnsiString sim, int dl)

{

AnsiString par;

int ln;

ln=sim.Length();

for (int i = 0; i < dl; i++) {

par+=sim[random(ln)+1];

}

return par;

}

int Prov_jorn(AnsiString path, AnsiString pr)

{

std::ifstream in(path.c_str(),std::ios::in);

 char ch[255];

 String r;   int k=0,d=0;

 if (!in)

 {return 1;}

 else d++;

 if(d!=0)

 {

  while (! in.eof ())

  {

  in>>ch;

  r=ch;

  if (r==pr)

  {

   k++;

   break;

  }

 }

 in.close();

 if (k==0) {

  return 0;

 }  else { return 2;}

 }

}

int Prov_slov(AnsiString path, AnsiString pr)

{

std::ifstream in(path.c_str(),std::ios::in);

 char ch[255];

 String r;   int k=0,d=0;

 if (!in)

 {return 1;}

 else d++;

 if(d!=0)

 {

  while (! in.eof ())

  {

  in>>ch;

  r=ch;

  if (r==pr)

  {

   k++;

   break;

  }

 }

 in.close();

 if (k==0) {

  return 0;

 }  else { return 2;}

 }

}

bool Prov_vir(AnsiString pr)

{

int sim[8];

for (int i = 1; i < pr.Length()+1; i++) {

for (int j = 1; j < pr.Length()+1; j++) {

 if (pr[i]==pr[j]) {

  sim[i]++;

 }

}

}

int schet;

for (int i = 1; i < pr.Length()+1; i++) {

if (sim[i]>1) {

 return false;

}

}

return true;

}

bool Jorn_zap(String par, String path)

{

std::ifstream in(path.c_str(),std::ios::in);

   if (!in)

 {return false;}

FILE *f;

f = fopen("jornal.txt","a");

fprintf(f,"%S\n",par);

fclose (f);

return true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

String DlP;   String par;

DlP=Edit3->Text;

int dl;

dl=DlP.ToIntDef(8);

if (dl>8) {

dl=8;

Application->MessageBox(L"Недопустимая длина пароля! Длина пароля установлена в 8 символов.", L"Генератор паролей", MB_OK|MB_ICONINFORMATION);

 Edit3->Text=dl;

}

if (dl<1) {

 dl=8;

Application->MessageBox(L"Недопустимая длина пароля! Длина пароля установлена в 8 символов.", L"Генератор паролей", MB_OK|MB_ICONINFORMATION);

 Edit3->Text=dl;

}

String sim="";

if (CheckBox1->Checked==true) {

 sim+="ASDFGHJKLZXCVBNMQWERTYUIOP";

}

if (CheckBox2->Checked==true) {

 sim+="0123456789";

}

if (CheckBox3->Checked==true) {

 sim+="asdfghjklzxcvbnmqwertyuiop";

}

if (CheckBox4->Checked==true) {

 sim+="~`!@#$%^&*()_-+={}[]:;<,>.?\/|";

}

if (sim.Length()<1) {

Application->MessageBox(L"Не указаны символы для генерации!", L"Генератор паролей", MB_OK|MB_ICONERROR);

}  else {

par=Generation(sim,dl);

Edit4->Text=par;

 }

int cheker=0; int prov_num=0;

if (CheckBox5->Checked==true) {

String path_j;

prov_num++;

path_j=Edit1->Text;

if (path_j.Length()<1) {

  Application->MessageBox(L"Не указан журнал!", L"Проверка по журналу", MB_OK|MB_ICONERROR);

} else {

 if (Prov_jorn(path_j,par)==0) {

  cheker++;

  Application->MessageBox(L"Нет совпадений с журналом.", L"Проверка по журналу", MB_OK|MB_ICONINFORMATION);

 }

 if (Prov_jorn(path_j,par)==1) {

    Application->MessageBox(L"Невозможно открыть журнал!", L"Проверка по журналу", MB_OK|MB_ICONERROR);

 }

 if (Prov_jorn(path_j,par)==2) {

    Application->MessageBox(L"Совпадение с журналом!", L"Проверка по журналу", MB_OK|MB_ICONERROR);

 }

}

}

if (CheckBox6->Checked==true) {

String path_s;

prov_num++;

path_s=Edit2->Text;

if (path_s.Length()<1) {

  Application->MessageBox(L"Не указан словарь!", L"Проверка по словарю", MB_OK|MB_ICONERROR);

} else {

 if (Prov_slov(path_s,par)==0) {

  cheker++;

  Application->MessageBox(L"Нет совпадений со словарем.", L"Проверка по словарю", MB_OK|MB_ICONINFORMATION);

 }

 if (Prov_slov(path_s,par)==1) {

    Application->MessageBox(L"Невозможно открыть словарь!", L"Проверка по словарю", MB_OK|MB_ICONERROR);

 }

 if (Prov_slov(path_s,par)==2) {

    Application->MessageBox(L"Совпадение со словарем!", L"Проверка по словарю", MB_OK|MB_ICONERROR);

 }

}

}

if (CheckBox7->Checked==true) {

 prov_num++;

 if (Prov_vir(par)==0) {

  cheker++;

  Application->MessageBox(L"Пароль не вырожденный.", L"Проверка на вырожденность", MB_OK|MB_ICONINFORMATION);

 }

 if (Prov_vir(par)==1) {

    Application->MessageBox(L"Пароль вырожденный!", L"Проверка на вырожденность", MB_OK|MB_ICONERROR);

 }

}

if (cheker!=0) {

if (cheker==prov_num) {

String path_j;

path_j=Edit1->Text;

if (path_j.Length()<1) {

  Application->MessageBox(L"Не указан журнал!", L"Запись в журнал", MB_OK|MB_ICONERROR);

} else {

   if (Jorn_zap(par,path_j)==true){

   Application->MessageBox(L"Пароль добавлен в журнал.", L"Запись в журнал", MB_OK|MB_ICONINFORMATION);

  } else {

  Application->MessageBox(L"Не удалось открыть журнал!", L"Запись в журнал", MB_OK|MB_ICONERROR);

  }

}

}  }

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

std::ofstream out("jornal.txt",std::ios::app);

Char buffer[255];

String s;

GetCurrentDirectory(sizeof(buffer),buffer);

s=buffer;

s=s+"\\jornal.txt";

Edit1->Text=s;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

String s;

OpenDialog1->Execute();

s=OpenDialog1->FileName;

Edit2->Text=s;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Char buffer[255];

String s;

GetCurrentDirectory(sizeof(buffer),buffer);

s=buffer;

s=s+"\\jornal.txt";

std::ofstream out("jornal.txt",std::ios::in);

if (out) {

Edit1->Text=s;

}

}

//---------------------------------------------------------------------------


Изм.

Лист

№ докум.

Подпись

Дата

Лист

1

ПГУ 2.090106.001 ПЗ

 Разраб.

остин В.В.

 Провер.

Фатеев А.Г.

Реценз.

 Н. Контр.

Фатеев А.Г.

 Утверд.

Разработка программы, генерирующей пароли пользователей

Лит.

Листов

1

Гр.08ПТ2

Указать словари?

Да

Нет

начало

Вводится длинна пароля

Есть словарь нужной длины?

Вывод предупреждения

Нет

Формирование пароля

Функция проверки пароля

Вывод пароля, занесение в журнал

Проверка успешна?

б

Да

Нет

а

Нет

Да

Диалог выбора файлов

Продолжить без словарей?

Да

Проверки по словарю не будет

б

а

конец

начало

Цикл от i=0 до длины пароля

random(количество доступных символов)

Запись в строку символа с номером полученным в предыдущей операции

Конец цикла

конец

начало

Загрузка словарей с соответствующей длинной паролей

Сравнение пароля с паролями из словарей

Возврат false

Возврат true

конец

совпадение

конец

Конец цикла 2

Формирование строки сообщения

Конец цикла 1

Возврат сформированного сообщения

начало

Обнуление счетчика символов

Цикл 1: от i =1 до длины пароля

Цикл 2: от j =1 до длины пароля

Символ в позиции i совпадает с символов в позиции j

Да

Нет

Увеличение счетчика символов на 1

начало

Загрузка журнала

Сравнение пароля с паролями из журнала

Возврат false

конец

Журнал пуст?

возврат true

Совпадения?


 

А также другие работы, которые могут Вас заинтересовать

67491. Стратегии разрешения конфликтов 260 KB
  Стратегии разрешения конфликтов Рассматриваемые в лекции вопросы Стратегии разрешения конфликта и их характеристика по схематической сетке К. Киллмена Тактики разрешения конфликта и механизмы их практического осуществления Ключевые понятия лекции Избегание уклонение Приспособление...
67492. Технология управления конфликтами 1 MB
  Технология управления конфликтами Рассматриваемые в лекции вопросы Методы диагностики конфликта и их характеристика Методы профилактики конфликта. Социально-психологические и организационные методы предупреждения конфликтов Технология управления процессом протекания конфликта...
67493. Урегулирование конфликтов с участием третьей стороны 396 KB
  Урегулирование конфликтов с участием третьей стороны. Рассматриваемые в лекции вопросы Третья сторона в конфликте: понятие статус предпосылки участия и виды вмешательства Формы участия и степень властных полномочий третьей стороны в урегулировании конфликта.
67494. Переговоры как способ урегулирования конфликтов 658.5 KB
  Во многих исследованиях, посвященных анализу переговорного процесса, термин «переговоры» используется для обозначения широкого круга ситуаций, в которых люди пытаются обсудить те или иные проблемы, согласовать какие-либо действия...
67495. Стили ведения переговоров 314 KB
  Стили ведения переговоров Рассматриваемые в лекции вопросы: Жесткий стиль переговоров и его характеристика. Противодействие тактике жесткого стиля Мягкий стиль ведения переговоров: сущность условия и методики применения Торговый стиль ведения переговоров: особенности и область применения.
67496. Межличностный конфликт 223.5 KB
  Типы конфликтных личностей и способы их нейтрализации Ключевые понятия лекции Деструктивные функции межличностного конфликта Ассертивность Конструктивные функции межличностного конфликта Конфликтные личности Манипуляция Межличностный конфликт Модели поведения личности в конфликте...
67497. Технология управления межгрупповыми конфликтами 580.5 KB
  Политические конфликты в посткоммунистической России: основные линии развертывания конфликтов и механизмы их урегулирования. В той мере в какой его пытаются подавить возрастает его потенциальная злокачественность и тогда взрыв предельно насильственных конфликтов является лишь вопросом времени.
67498. Нормативно-правовое регулирование организационных конфликтов 417 KB
  Специфика конфликта в организации Организационный конфликт рассматривается как специфическая форма взаимодействия между организационными единицами в основе которого лежит некое противоречие. Поскольку конфликт рассматривается как особый тип взаимодействия то мы ограничиваем сферу его возможного...
67499. Социальное партнерство как фактор регулирования социально-трудовых отношений 107 KB
  Социальное партнерство как фактор регулирования социально-трудовых отношений. Рассматриваемые в лекции вопросы Социальное партнерство как фактор регулирования социально-трудовых отношений Ключевые понятия лекции Генеральное соглашение Тарифное соглашение Специальное соглашение Двухсторонняя комиссия...