Ім'я файлу: Морозов Лаб4.docx
Розширення: docx
Розмір: 199кб.
Дата: 06.12.2021
скачати
Пов'язані файли:
Звіт з практики.docx


Міністерство освіти та науки України

Національний університет «Львівська політехніка»

Кафедра ЕОМ



Лабораторна робота №4

з дисципліни:

Проектування засобів захисту інформації в комп'ютерних системах та мережах

на тему:

“Комбіновані криптосистеми на прикладі цифрового конверта”
Виконав студент групи КІКС-11

Грицик А. Я.

Прийняв:

Морозов Ю.В
Львів 2020

Мета: реалізувати програму підтримки комбінованих криптосистем на

прикладі цифрового конверта.

Завдання

В ході роботи необхідно засвоїти основні принципи побудови омбінованих криптосистем, розробити програму підтримки комбінованих криптосистем на прикладі цифрового конверта. Для спрощення реалізації розрядність відкритого та закритого ключів повинна складати до 64 біт.

Текст програми


using System;

using System.Collections.Generic;

using System.Globalization;

using System.Linq;

using System.Security.Cryptography;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;
namespace Cast

{

public class Envelope

{

byte[] encodedCASTMessage;
public void Reset()

{

rsaParmSessionKey.Exponent = null;

rsaParmDigitalSignature.Exponent = null;

}
#region Main
public DigitalEnvelopeModel GetEncryptedEnvelope(string text)

{

uint[] key = KeyGenerator();
string keyStr = GetStringFromKey(key);
string encryptSessionKey = SessionKey(keyStr, true);
string encryptText = MessageCoder(text, keyStr, true);

string signature = CreateDigitalSignature(text);
return new DigitalEnvelopeModel(encryptSessionKey, encryptText, signature);

}
public DigitalEnvelopeModel GetDecryptedEnvelope(DigitalEnvelopeModel envelope)

{

string sessionKeyStr = SessionKey(envelope.SessionKey, false);
string decryptText = MessageCoder(envelope.Body, sessionKeyStr, false);

bool signature = CheckDigitalSignature(decryptText, envelope.Signature);
return new DigitalEnvelopeModel(sessionKeyStr, decryptText, (signature ? "Good" : "Bad") + " signature");

}

#endregion
#region MessageCoder

private string MessageCoder(string text, string key128, bool encrypt)

{

string result;

if (encrypt)

{

encodedCASTMessage = AcedCast5.EncryptString(text, key128);

result = BitConverter.ToString(encodedCASTMessage).Replace("-", "");

}

else

{

byte[] encodedByte = StringToByteArray(text);

result = AcedCast5.DecryptString(encodedByte, key128);

}

return result;

}
#endregion
#region Key Generator

private uint[] KeyGenerator()

{

uint[] res = new uint[4];

Random random = new Random();

for (int i = 0; i < 3; i++)

{

res[i] = (uint)random.Next(0x70000000, 0x7fffffff);

}

return res;

}

private string GetStringFromKey(uint[] key)

{

StringBuilder keyStr = new StringBuilder();

foreach (var u in key)

{

keyStr.Append($"{u:X},");

}

keyStr.Remove(keyStr.Length - 1, 1);

return keyStr.ToString();

}

private uint[] GetKeyFromString(string key)

{

List keyUint = new List();

string[] partOfKey = key.Split(',');

foreach (var s in partOfKey)

{

keyUint.Add(uint.Parse(s, NumberStyles.HexNumber));

}

return keyUint.ToArray();

}

#endregion

public static byte[] StringToByteArray(String hex)

{

var result = new byte[(hex.Length + 1) / 2];

var offset = 0;

if (hex.Length % 2 == 1)

{

// If length of input is odd, the first character has an implicit 0 prepended.

result[0] = (byte)Convert.ToUInt32(hex[0] + "", 16);

offset = 1;

}

for (int i = 0; i < hex.Length / 2; i++)

{

result[i + offset] = (byte)Convert.ToUInt32(hex.Substring(i * 2 + offset, 2), 16);

}

return result;

}
string Encryption(string data, ref RSAParameters RSAKeyInfo)

{

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

RSA.ImportParameters(RSAKeyInfo);

byte[] byteData = Encoding.UTF8.GetBytes(data);

byte[] result = RSA.Encrypt(byteData, true);

return BitConverter.ToString(result).Replace("-", "");

}

string Decryption(string data, ref RSAParameters RSAKeyInfo)

{

try

{

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

RSA.ImportParameters(RSAKeyInfo);

byte[] byteData = StringToByteArray(data);

byte[] result = RSA.Decrypt(byteData, true);

return System.Text.Encoding.UTF8.GetString(result, 0, result.Length);

}

catch(System.Security.Cryptography.CryptographicException e)

{

MessageBox.Show("Error in decryption");

return data;

}

}
#region Session Key

private RSAParameters rsaParmSessionKey;

public string SessionKey(string data, bool encrypt)

{

if (rsaParmSessionKey.Exponent == null)

{

rsaParmSessionKey = new RSACryptoServiceProvider(1024).ExportParameters(true);
}
return encrypt ? Encryption(data, ref rsaParmSessionKey) : Decryption(data, ref rsaParmSessionKey);

}

#endregion
#region Digital Signature

private RSAParameters rsaParmDigitalSignature;

public string CreateDigitalSignature(string data)

{

SHA1 sha1Hash = SHA1.Create();
byte[] sourceBytes = Encoding.UTF8.GetBytes(data);

byte[] hashBytes = sha1Hash.ComputeHash(sourceBytes);

string hash = BitConverter.ToString(hashBytes);
if (rsaParmDigitalSignature.Exponent == null)

{

rsaParmDigitalSignature = new RSACryptoServiceProvider(1024).ExportParameters(true);

}
return Encryption(hash, ref rsaParmDigitalSignature);

}

public bool CheckDigitalSignature(string data, string encryptData)

{

SHA1 sha1Hash = SHA1.Create();
byte[] sourceBytes = Encoding.UTF8.GetBytes(data);

byte[] hashBytes = sha1Hash.ComputeHash(sourceBytes);

string hash = BitConverter.ToString(hashBytes);
if (rsaParmDigitalSignature.Exponent == null)

{

rsaParmDigitalSignature = new RSACryptoServiceProvider(1024).ExportParameters(true);

}

return Decryption(encryptData, ref rsaParmDigitalSignature) == hash;

}

#endregion
}
public class DigitalEnvelopeModel

{

public string SessionKey;

public string Body;

public string Signature;
public DigitalEnvelopeModel(string encryptSessionKey, string encryptText, string signature)

{

this.SessionKey = encryptSessionKey;

this.Body = encryptText;

this.Signature = signature;
}

}

}



Рис. 1. Результат виконання програми




Рис. 2. Діаграма класів

Висновок: На цій лабораторній роботі було реалізвано програму підтримки комбінованих криптосистем на основі цифрового конверта.

скачати

© Усі права захищені
написати до нас