AES на PC

В прошлой статье я рассказывал про то, как применять шифрование AES на STM8L. Но во многих случаях данные нужно будет шифровать на PC, и отправлять в МК, поэтому сейчас я расскажу, как это делать. На PC я знаю только C#, потому и буду использовать его.

В .net framework есть готовый класс для шифрования, поддерживающий несколько алгоритмов, в том числе и AES

Создадим новый проект C# в VisualStudio, и добавим в него:

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
using System.Security.Cryptography;
using System.IO;
 
//вектор инициализации
static byte[] IV = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00 };
 
//ключ шифрования
static byte[] key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
 0x0C, 0x0D, 0x0E, 0x0F, 0x10 };
 
 public static byte[] Encrypt(byte[] ENC, byte[] AES_KEY, byte[] AES_IV)
 {
      using (Rijndael AES = Rijndael.Create())
      {
            AES.KeySize = 128;
            AES.BlockSize = 128;
            AES.Padding = PaddingMode.None;
 
            MemoryStream MS = new MemoryStream();
            CryptoStream CS = new CryptoStream(MS, AES.CreateEncryptor(AES_KEY, AES_IV), CryptoStreamMode.Write);
 
            CS.Write(ENC, 0, ENC.Length);
            CS.Close();
 
            return MS.ToArray();
       }
 }
 public static byte[] Decrypt(byte[] DEC, byte[] AES_KEY, byte[] AES_IV)
 {
        using (Rijndael AES = Rijndael.Create())
        {
            AES.KeySize = 128;
            AES.BlockSize = 128;
            AES.Padding = PaddingMode.None;
 
            MemoryStream MS = new MemoryStream();
            CryptoStream CS = new CryptoStream(MS, AES.CreateDecryptor(AES_KEY, AES_IV), CryptoStreamMode.Write);
 
            CS.Write(DEC, 0, DEC.Length);
            CS.Close();
 
            return MS.ToArray();
       }
 }

Всё, можно кодировать и декодировать данные,делать это очень просто

1
2
3
4
5
6
7
8
9
10
11
12
13
 //объявим буфер
 byte[] Buffer = new byte[16];
 
 //заполним буфер, чтоб не ноли шифровать
 for (int i = 0; i < 16; i++)  
 {
     Buffer[i] = (byte)i;
 }
 
 //шифруем
 Buffer = Encrypt(Buffer, key, IV);
 //дешифруем
 Buffer = Decrypt(Buffer, key, IV);

IV библиотека AVR-Crypto-Lib не поддерживает, так что оставляем его нулевым, а вот key модифицируем согласно своему ключу.

2 Комментарии к этой записи

Оставить комментарий