logo
Лаб работа 3

Примечания

Для реализации симметричных криптографических преобразований в языке С# можно использовать класс AesCryptoServiceProvider:

Шифрование:

byte[] Encrypt(string plainText, byte[] Key, byte[] IV){

{

using (var aesAlg = new AesCryptoServiceProvider())

{

aesAlg.Key = Key; // задание ключа преобразования

aesAlg.IV = IV; // задание инициализирующего вектора

// Создание объекта-преобразования

var encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

// Создание потока для осуществления преобразования

using (var msEncrypt = new MemoryStream())

{

// Создание криптографического потока, применяющего преобразование

using (var csEncrypt = new

CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))

{

using (var swEncrypt = new StreamWriter(csEncrypt))

{

//Запись шифртекста в поток

swEncrypt.Write(plainText);

}

var encrypted = msEncrypt.ToArray();

}

}

}

return encrypted;

}

Расшифрование:

string Decrypt(byte[] cipherText, byte[] Key, byte[] IV)

{

using (var aesAlg = new AesCryptoServiceProvider())

{

aesAlg.Key = Key; // задание ключа преобразования

aesAlg.IV = IV; // задание инициализирующего вектора

// Создание объекта-преобразования

var decryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

// Создание потока для осуществления преобразования

using (var msDecrypt = new MemoryStream())

{

// Создание криптографического потока, применяющего преобразование

using (var csDecrypt = new

CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))

{

using (var srDecrypt = new StreamReader(csDecrypt))

{

//Чтение байтов шифртекста и их расшифрование

plaintext = srDecrypt.ReadToEnd();

}

}

}

}

return plaintext;

}

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

Для реализации ассиметричных алгоритмов можно использовать класс RSACryptoServiceProvider:

Шифрование:

byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)

{

using (var RSA = new RSACryptoServiceProvider())

{

byte[] encryptedData;

// Импорт ключей

RSA.ImportParameters(RSAKeyInfo)

// Шифрование данных

encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding);

return encryptedData;

}

}

Расшифрование:

byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)

{

using (var RSA = new RSACryptoServiceProvider())

{

byte[] decryptedData;

// Импорт ключей

RSA.ImportParameters(RSAKeyInfo)

// Шифрование данных

decryptedData = RSA.Decrypt(DataToEncrypt, DoOAEPPadding);

return decryptedData;

}

}

Информация о ключах может быть передана из провайдера в провайдер при помощи структуры RSAParameters. Объект RSAParameters может быть получен из криптопровайдера при помощи функции RSACryptoServiceProvider.ExportParameters()