Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Marchcat
0 / 0 / 1
Регистрация: 09.01.2015
Сообщений: 222
Завершенные тесты: 1
#1

AES128 c Byte array - C#

21.08.2017, 01:18. Просмотров 271. Ответов 10

Добрый день ! Нужна реализация AES 128 с массивом байт , а не со строкой .
https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx - со строками работает .
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2017, 01:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос AES128 c Byte array (C#):

Конвертирование HEX array в BYTE array
Собственно сабж. Накопипастил. И слепил это. Скажите а можно лаконичнее? ...

Byte array to string
Добрый день! Имеется девайс: U-Prox-Keypad Задача: считать с клавиатуры...

Byte array to struct
Имеется структура например public struct Sphere { public...

Struct to byte array
Есть вот такая вот структура private struct ipcam_command_t { ...

byte array занести строку
Добрый день всем. Нутром чую что это сделать легко, но не пойму как правельно....

Конвертация из string в byte array
Добрых времени суток. Задача такова, спарсить текст и перевести его в массив...

10
kolorotur
Эксперт .NET
9940 / 8328 / 2045
Регистрация: 17.09.2011
Сообщений: 14,335
21.08.2017, 02:33 #2
Цитата Сообщение от Marchcat Посмотреть сообщение
со строками работает
Что вас заставило сделать такой вывод?
Ни один метод класса, связанный с шифрованием, не принимает на вход строку и даже в примере внизу страницы идет шифрование байтов, а не символов.
Работает он как раз с байтами, так что вы уже нашли ответ на свой вопрос
0
Marchcat
0 / 0 / 1
Регистрация: 09.01.2015
Сообщений: 222
Завершенные тесты: 1
21.08.2017, 02:39  [ТС] #3
C#
1
2
static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
swEncrypt.Write(plainText);
0
kolorotur
Эксперт .NET
9940 / 8328 / 2045
Регистрация: 17.09.2011
Сообщений: 14,335
21.08.2017, 09:45 #4
Лучший ответ Сообщение было отмечено Marchcat как решение

Решение

Marchcat, посмотрите что происходит внутри этого метода: строка записывается в MemoryStream как массив байтов и потом эти байты шифруются.
Если у вас уже имеется готовый массив байтов, то этот шаг, естественно, пропускается.

Это пример использования класса сделан со строкой, а сам шифровальщик умеет работать только с байтами.
0
Marchcat
0 / 0 / 1
Регистрация: 09.01.2015
Сообщений: 222
Завершенные тесты: 1
21.08.2017, 16:58  [ТС] #5
Что то не допираю как переделать ( Жара наверно (( )
C#
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
 private void button1_Click(object sender, EventArgs e)
        {
            t_out.Clear();
 
            string hex = t_key.Text;
            hex = hex.Replace(" ", "");
            int NumberChars = hex.Length;
            byte[] key = new byte[NumberChars / 2];
            for (int i = 0; i < NumberChars; i += 2)
                key[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
 
            string hex1 = t_iv.Text;
            hex1 = hex1.Replace(" ", "");
            int NumberChars1 = hex1.Length;
            byte[] iv = new byte[NumberChars1 / 2];
            for (int i = 0; i < NumberChars1; i += 2)
                iv[i / 2] = Convert.ToByte(hex1.Substring(i, 2), 16);
 
            string buf = t_in.Text ;
 
            using (Aes myAes = Aes.Create())
            {
 
                // Encrypt the string to an array of bytes.
                byte[] encrypted = EncryptStringToBytes_Aes(buf, key, iv);
                for (int i = 0; i < encrypted.Length - 1; i++)
                {
                    t_out.AppendText(encrypted[i].ToString("X"));
                }
            }
 
 
        }
 
        static byte[] EncryptStringToBytes_Aes(byte[] plainText, byte[] Key, byte[] IV)
        {
            // Check arguments.
            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;
            // Create an Aes object
            // with the specified key and IV.
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = Key;
                aesAlg.IV = IV;
 
                // Create a decrytor to perform the stream transform.
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
 
                // Create the streams used for encryption.
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
 
                            //Write all data to the stream.
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }
 
 
            // Return the encrypted bytes from the memory stream.
            return encrypted;
 
        }
0
kolorotur
Эксперт .NET
9940 / 8328 / 2045
Регистрация: 17.09.2011
Сообщений: 14,335
21.08.2017, 17:12 #6
C#
1
2
3
4
5
6
7
8
                // Create the streams used for encryption.
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                        csEncrypt.Write(plainText);
 
                    encrypted = msEncrypt.ToArray();
                }
0
Marchcat
0 / 0 / 1
Регистрация: 09.01.2015
Сообщений: 222
Завершенные тесты: 1
21.08.2017, 17:20  [ТС] #7
Ругается на csEncrypt.Write(plainText);
0
kolorotur
Эксперт .NET
9940 / 8328 / 2045
Регистрация: 17.09.2011
Сообщений: 14,335
21.08.2017, 17:38 #8
Ну да, надо передать так же стартовую позицию и размер:
C#
1
csEncrypt.Write(plainText, 0, plainText.Length);
0
Marchcat
0 / 0 / 1
Регистрация: 09.01.2015
Сообщений: 222
Завершенные тесты: 1
21.08.2017, 18:01  [ТС] #9
А как salt добавить в алго ?
0
OwenGlendower
Супер-модератор
Эксперт .NET
8760 / 7764 / 3323
Регистрация: 17.03.2014
Сообщений: 15,273
Записей в блоге: 1
21.08.2017, 19:01 #10
Marchcat, перед записью своих запиши salt. Чтобы упростить разделение salt и оригинальных данных используй буфер равный длине блока алгоритма AES (свойство BlockSize - не забудь поделить его значение на 8 чтобы получить размер в байтах).

Правда здесь еще возникает вопрос - зачем тебе salt в симметричном алгоритме шифрования? В них эту роль выполняет вектор инициализации.
0
Marchcat
0 / 0 / 1
Регистрация: 09.01.2015
Сообщений: 222
Завершенные тесты: 1
21.08.2017, 19:25  [ТС] #11
Просто в CAN есть авторизация очень похоже на aes128 . Вот и пытаюсь попробовать .
0
Миниатюры
AES128 c Byte array  
21.08.2017, 19:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2017, 19:25
Привет! Вот еще темы с решениями:

Перевести строку, содержащую данные массива байт (byte[]) в byte[]
Приветствую. Есть такая строка - &quot;&quot; Как её перевести в массив байт? 1....

Добавление элементов из массива byte[] в массив byte[]
Подскажите, пожалуйста, как можно добавить элементы из массива byteb в массив...

Operator '||' cannot be applied to operands of type 'byte' and 'byte'
Доброго времени суток! Появилась некоторая проблема в работе с массивом... Есть...

Равносильная конвертация byte[] -> BigInteger -> byte[]
Здравствуйте. Пишу проект для дипломной работы по криптографии и в нем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru