Материал: Разработка автоматизированной системы учета электронных подписей

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

 

ЗАКЛЮЧЕНИЕ


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

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

Произведено проектирование приложения с помощью универсального языка моделирования (UML). В рамках проектирования были построены следующие типы диаграмм (перед построением каждого типа диаграмм приведено краткое описание данного типа диаграммы):

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

диаграмма прецедентов (UseCase-диаграмма) - описание действий пользователя при работе с приложением;

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

диаграммы классов приложения для ПК и серверного Web-приложения; также было приведено краткое описание классов, представленных на данных диаграммах;

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

Построены макеты окон приложения для ПК, а также макеты страниц Web-приложения.

Произведен выбор инструментария, используемый для реализации Web-приложения и приложения для ПК:

язык программирования PHP и PHP-фреймворк (программная платформа) Yii2;

реляционная система управления базами данных MySQL;

язык программирования C#;

программная платформа для разработки Windows-приложений .NET Framework 4.0;

среда визуальной разработки Visual Studio 2015.

В качестве операционной системы для работы приложения для ПК была использована операционная система Windows 7 64-х разрядная, а для Web-приложения - 64-х разрядная операционная система Ubuntu 16.04.

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

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

 

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


1.     Виссер Дж. Разработка обслуживаемых программ на языке C# / Виссер Дж. - Москва: ДМК Пресс, 2016. - 292 с.

2.      Рихтер, Дж. CLR via C#. Программирование на платформе Microsoft .NET Framework4.0 на языке C#. 3-е изд. - СПб.: Питер, 2012. - 982 с.

.        Албахари Д. C# 6.0. Справочник. Полное описание языка. 6-е изд. / Албахари Д., Албахари Б. - Москва: OReilly, 2016. - 1040 с.

4.     Гольцман В. MySQL 5.0. Библиотека программиста / СПб: Питер, 2010. - 253 с.

5.      Шлосснейгл Дж., Профессиональное программирование на PHP / Москва: Вильямс, 2006. - 624 с.

.        Симдянов И. PHP 7. В подлиннике / Симдянов И., Котеров Д. - Санкт-Петербург: БХВ-Петербург, 2016. - 1073 с.

.        Исаев Г.Н. Проектирование информационных систем / Москва: Омега-Л-Москва, 2015. - 512 с.

.        Проектирование информационных систем (на примере методов структурного системного анализа): учебное пособие / сост. О. Г. Инюшкина. - Екатеринбург: Форт-Диалог Исеть, 2014. - 240 с.

.        Леоненков А. Самоучитель языка UML. - СПб: БХВ-Петербург, 2007. - 576 с.

.        Буч Г., Рамбо Д., Якобсон А. Язык UML. Руководство пользователя. Второе издание. ДМК, 2006, 496 с

11.   Теслюк Л.М. Оценка эффективности инвестиционного проекта / Теслюк Л.М., Румянцева А.В. - Москва: Фолио, 2011 - 145 с.

 

ПРИЛОЖЕНИЕ


(информационное)

Листинг Web-приложения

class Files extends \yii\db\ActiveRecord

{

/**

* @inheritdoc

*/

public static function tableName()

{

return 'Files';

}

/**

* @inheritdoc

*/

public function rules()

{

return [

[['name', 'path', 'mimo', 'size', 'dateAdd'], 'required'],

[['name', 'path', 'mimo'], 'string'],

[['size'], 'integer'],

[['dateAdd'], 'safe'],

];

}

/**

* @inheritdoc

*/

public function attributeLabels()

{

return [

'id' => 'ID',

'name' => 'Name',

'path' => 'Path',

'mimo' => 'Mimo',

'size' => 'Size',

'dateAdd' => 'Date Add',

];

}

}Users extends \yii\db\ActiveRecord implements IdentityInterface

{

const SCENARIO_LOGIN = 'login';

const SCENARIO_PROFILE = 'profile';

public $entranceIds = [];

public static function tableName()

{

return 'Users';

}

/**

* @inheritdoc

*/

public function rules()

{

return [

[['login', 'password'], 'required', 'message' => 'Поле не должно быть пустым'],

[['login'], 'safe'],

[['enabled'], 'integer'],

[['password'], 'string', 'max' => 40],

];

}function scenarios()

{

$scenarios = parent::scenarios();

$scenarios[self::SCENARIO_LOGIN] = ['login', 'password'];

$scenarios[self::SCENARIO_PROFILE] = ['login'];

return $scenarios;

}

/**

* @inheritdoc

*/

public function attributeLabels()

{

return [

'id' => 'ID',

'login' => 'Login',

'password' => 'Password',

'lastLogin' => 'Last Login',

'enabled' => 'Enabled',

];

}

public static function login($login, $password)

{

$user = self::find()->where(['login' => $login, 'password' => sha1($password)])->one();

if ($user && isset($user->id) && $user->id)

{

Yii::$app->getUser()->login($user);

return true;

}

else

{

return false;

}

}

public static function findIdentity($id)

{

return static::findOne($id);

}

public static function findIdentityByAccessToken($token, $type = null)

{

return static::findOne(['access_token' => $token]);

}

public function getId()

{

return $this->id;

}

public function getAuthKey()

{

return $this->authKey;

}

public function validateAuthKey($authKey)

{

return $this->authKey === $authKey;

}

}frontend\controllers;yii\web\Controller;app\models\Users;yii\web\Response;Yii;yii\data\ActiveDataProvider;yii\helpers\ArrayHelper;UsersController extends AuthController

{

public $ipp = 20;

public function actionIndex()

{

$query = Users::find();

$provider = new ActiveDataProvider([

'query' => $query,

'pagination' => [

'pageSize' => 10

]

]);

return $this->render('index', [

'provider' => $provider

]);

}

public function actionEdit()

{

$id = Yii::$app->request->get('id', null);

if ($id)

{

$model = Users::find()->where(['id' => $id])->one();

}

else

{

$model = new Users();

}

$model->scenario = 'profile';

if (Yii::$app->request->isPost)

{

$post = Yii::$app->request->post('Users');

$model->setAttributes ($post, false);

if (!empty($post['password']))

$model->password = sha1($post['password']);

$model->status = 'user';

$model->save(false);

return $this->redirect('/users');

}

return $this->render('edit', [

'model' => $model,

]);

}

public function actionDelete()

{

$id = Yii::$app->request->get('id', null);

if ($id)

{

$model = Users::find()->where(['id' => $id])->one();

$model->delete();

return $this->redirect('/users');

}

return $this->redirect('/users');

}

}

(информационное)

Листинг приложения для ПК

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

NetworkChecker nc = new NetworkChecker();

if (!nc.checkNetwork())

{

MessageBox.Show("Соединение с Интернетом отсутствует или ограничено!");

Application.Exit();

}

}

private void button1_Click(object sender, EventArgs e)

{

if (textBox1.Text == "" || textBox2.Text == "")

{

MessageBox.Show("Для авторизации необходимо ввести имя пользователя и пароль!");

return;

}

ApiAdapter a = new ApiAdapter();

if (a.login(textBox1.Text, textBox2.Text) > 0)

{

FormAccount fa = new FormAccount();

fa.Show();

this.Hide();

}

else

{

MessageBox.Show("Неверное имя пользователя или пароль!");

}

}

private void button2_Click(object sender, EventArgs e)

{

Application.Exit();

}

}

class ApiAdapter

{

public String domain = "";

public static int userId = 0;

public static String userName = "";

public static String password = "";

public static String fullName = "";

public int login(String login, String password)

{

ReqParam p1 = new ReqParam();

p1.name = "login";

p1.value = login;

ReqParam p2 = new ReqParam();

p2.name = "password";

p2.value = password;

ReqParam p3 = new ReqParam();

p3.name = "type";

p3.value = "json";

List<ReqParam> pl = new List<ReqParam>(0);

pl.Add(p1);

pl.Add(p2);

pl.Add(p3);

JObject lr = this.getRequest("/login/login", pl);

String r = lr.GetValue("result").ToString();

if (r == "True")

{

ApiAdapter.userId = Convert.ToInt32(lr.GetValue("userId").ToString());

ApiAdapter.userName = lr.GetValue("login").ToString();

ApiAdapter.fullName = lr.GetValue("fullName").ToString();

}

return ApiAdapter.userId;

}

public JObject getRequest(String uri, List<ReqParam> pl)

{

String url = this.domain + uri + "?";

for (int i = 0; i < pl.Count; i++)

{

if (i > 0)

url += "&";

url += (pl[i].join());

}

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

try

{

HttpWebResponse responce = (HttpWebResponse)request.GetResponse();

if (responce.StatusCode != HttpStatusCode.OK)

{

return null;

}

using (StreamReader sr = new StreamReader(responce.GetResponseStream()))

{

String json = sr.ReadToEnd();

JObject jObject = JObject.Parse(json);

return jObject;

}

}

catch

{

return null;

}

}

}

public class CertCenterModel

{

public int id = 0;

public String name = "";

public String ocspUrl = "";

}

public class CertificateModel

{

public int id = 0;

public String fullName = "";

public int centerId = 0;

public String position = "";

public String companyName = "";

public String INN = "";

public String KPP = "";

public int fileId = 0;

public String fileUrl = "";

}

public class SignatureModel {

public int id = 0;

public String name = "";

public String url = "";

public String signatureUrl = "";

public int signatureId = 0;

}

public class ReqParam

{

public String name = "";

public String value = "";

public String join()

{

return this.name + "=" + this.value;

}

}

public class NetworkChecker

{

public Boolean checkNetwork()

{

Boolean res = true;

try

{

IPHostEntry entry = Dns.GetHostEntry("dns.msftncsi.com");

if (entry.AddressList.Length == 0)

{

return false;

}

else

{

if (!entry.AddressList[0].ToString().Equals("131.107.255.255"))

{

return false;

}

}

}

catch

{

return false;

}

// Проверить загрузку документа ncsi.txt

{

HttpWebResponse responce = (HttpWebResponse)request.GetResponse();

if (responce.StatusCode != HttpStatusCode.OK)

{

return false;

}

using (System.IO.StreamReader sr = new StreamReader(responce.GetResponseStream()))

{

if (sr.ReadToEnd().Equals("Microsoft NCSI"))

{

 return true;

}

else

{

return false;

}

}

}

catch

{

return false;

}

return res;

}

}

Источник: https://www.bibliofond.ru/view.aspx?id=897061