1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
| using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace shifr
{
class Program
{
static void Main(string[] args)
{
try
{
const string original = "the world is your"; // шифруемая константа
// Создаем новый экземпляр класса Aes
// Создаем ключ и вектор инициализации (IV)
using (var myAes = Aes.Create())
{
// Зашифрованную строку переводим в массив байтов
byte[] encrypted = EncryptStringToBytesAes(original, myAes.Key, myAes.IV);
// Расшифровываем байты и записываем в строку.
string roundtrip = DecryptStringFromBytesAes(encrypted, myAes.Key, myAes.IV);
//Выводим на экран результат
Console.WriteLine("Original: {0}", original);
Console.WriteLine("Round Trip: {0}", roundtrip);
}
}
catch (Exception e)
{
// Если что-то не так выбрасываем исключение
Console.WriteLine("Error: {0}", e.Message);
}
Console.ReadKey();
}
static byte[] EncryptStringToBytesAes(string plainText, byte[] Key, byte[] IV)
{
// Проверка аргументов
if (plainText == null || plainText.Length <= 0)
throw new ArgumentNullException("plainText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
byte[] encrypted;
// Создаем объект класса AES
// с определенным ключом and IV.
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
// Создаем объект, который определяет основные операции преобразований.
ICryptoTransform 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);
}
encrypted = msEncrypt.ToArray();
}
}
}
//Возвращаем зашифрованные байты из потока памяти.
return encrypted;
}
static string DecryptStringFromBytesAes(byte[] cipherText, byte[] Key, byte[] IV)
{
// Проверяем аргументы
if (cipherText == null || cipherText.Length <= 0)
throw new ArgumentNullException("cipherText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
// Строка, для хранения расшифрованного текста
string plaintext;
// Создаем объект класса AES,
// Ключ и IV
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
// Создаем объект, который определяет основные операции преобразований.
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
// Создаем поток для расшифрования.
using (var msDecrypt = new MemoryStream(cipherText))
{
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (var srDecrypt = new StreamReader(csDecrypt))
{
// Читаем расшифрованное сообщение и записываем в строку
plaintext = srDecrypt.ReadToEnd();
}
}
}
}
return plaintext;
}
}
} |