Розробка навчальної клієнт – серверної програми
Автор: Juliet Andriychuk • Январь 17, 2021 • Лабораторная работа • 11,940 Слов (48 Страниц) • 331 Просмотры
Лабораторна робота №1
з курсу: «Системи та засоби автентифікації»
на тему: «Розробка навчальної клієнт – серверної програми»
Львів 2020
Мета роботи: ознойомитися з основними принципами ідентифікації та парольної автентифікації, розробити навчальну клієнт – серверну програму на базі стеку TCP/IP ( у вигляді окремих модулів, клієнтського і серверного).
Завдання
Розробити навчальну клієнт – серверну програму на базі стеку TCP/IP ( у вигляді окремих модулів, клієнтського і серверного).
Програма повинна виконувати ідентифікацію та парольну автентифікацію користувачів. Пароль користувачів повинен зберігатись на сервері у вигляді хеш-значення. Для шифрування паролів застосувати метод «необоротної збірки».
Необхідно також передбачити ведення політики безпеки адміністратором даної програми. Політика безпеки містить:
- можливість зміни свого пароля користувача;
- можливість встановлення максимальної кількості неправильного вводу пароля;
- можливість встановлення обов’язкової зміни пароля при 1-шій реєстрації користувача
- можливість скидання пароля адміністратором
Виконання
Серверна частина
Клас Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Security.Cryptography.X509Certificates;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace SZA_Lab1_Server
{
public class Program
{
static void Main(string[] args)
{
Program p = new Program();
Console.WriteLine();
Console.WriteLine("Press enter to close program.");
Console.ReadLine();
}
// Self-signed certificate for SSL encryption.
// You can generate one using my generate_cert script in tools directory (OpenSSL is required).
public X509Certificate2 cert = new X509Certificate2("server.pfx", "qwerty");
// IP of this computer. If you are running all clients at the same computer you can use 127.0.0.1 (localhost).
public IPAddress ip = IPAddress.Parse("127.0.0.1");
public int port = 2000;
public bool running = true;
public TcpListener server;
public Dictionary<string, UserInfo> users = new Dictionary<string, UserInfo>(); // Information about users + connections info.
public Program()
{
Console.Title = "SZA Lab1 Server";
Console.WriteLine("----- SZA Lab1 Server -----");
LoadUsers();
Console.WriteLine("[{0}] Starting server...", DateTime.Now);
server = new TcpListener(ip, port);
server.Start();
Console.WriteLine("[{0}] Server is running properly!", DateTime.Now);
Listen();
}
void Listen() // Listen to incoming connections.
{
while (running)
{
TcpClient tcpClient = server.AcceptTcpClient(); // Accept incoming connection.
Client client = new Client(this, tcpClient); // Handle in another thread.
}
}
string usersFileName = Environment.CurrentDirectory + "\\users.dat";
public void SaveUsers() // Save users data
{
try
{
Console.WriteLine("[{0}] Saving users...", DateTime.Now);
BinaryFormatter bf = new BinaryFormatter();
FileStream file = new FileStream(usersFileName, FileMode.Create, FileAccess.Write);
bf.Serialize(file, users.Values.ToArray()); // Serialize UserInfo array
file.Close();
Console.WriteLine("[{0}] Users saved!", DateTime.Now);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public void LoadUsers() // Load users data
{
try
{
Console.WriteLine("[{0}] Loading users...", DateTime.Now);
BinaryFormatter bf = new BinaryFormatter();
FileStream file = new FileStream(usersFileName, FileMode.Open, FileAccess.Read);
...