Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
Marchcat
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 103
#1

AES128 c Byte array - C#

21.08.2017, 01:18. Просмотров 245. Ответов 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 - C#
Собственно сабж. Накопипастил. И слепил это. Скажите а можно лаконичнее? //Художественный изгиб преобразования HEX в Byte...

Byte array to struct - C#
Имеется структура например public struct Sphere { public Vector location; public float radius; } ...

Struct to byte array - C#
Есть вот такая вот структура private struct ipcam_command_t { public short cmd; public short...

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

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

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

10
kolorotur
Эксперт .NET
9343 / 7871 / 1272
Регистрация: 17.09.2011
Сообщений: 13,516
21.08.2017, 02:33 #2
Цитата Сообщение от Marchcat Посмотреть сообщение
со строками работает
Что вас заставило сделать такой вывод?
Ни один метод класса, связанный с шифрованием, не принимает на вход строку и даже в примере внизу страницы идет шифрование байтов, а не символов.
Работает он как раз с байтами, так что вы уже нашли ответ на свой вопрос
0
Marchcat
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 103
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
9343 / 7871 / 1272
Регистрация: 17.09.2011
Сообщений: 13,516
21.08.2017, 09:45 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Marchcat, посмотрите что происходит внутри этого метода: строка записывается в MemoryStream как массив байтов и потом эти байты шифруются.
Если у вас уже имеется готовый массив байтов, то этот шаг, естественно, пропускается.

Это пример использования класса сделан со строкой, а сам шифровальщик умеет работать только с байтами.
0
Marchcat
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 103
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
9343 / 7871 / 1272
Регистрация: 17.09.2011
Сообщений: 13,516
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 / 0
Регистрация: 09.01.2015
Сообщений: 103
21.08.2017, 17:20  [ТС] #7
Ругается на csEncrypt.Write(plainText);
0
kolorotur
Эксперт .NET
9343 / 7871 / 1272
Регистрация: 17.09.2011
Сообщений: 13,516
21.08.2017, 17:38 #8
Ну да, надо передать так же стартовую позицию и размер:
C#
1
csEncrypt.Write(plainText, 0, plainText.Length);
0
Marchcat
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 103
21.08.2017, 18:01  [ТС] #9
А как salt добавить в алго ?
0
OwenGlendower
Модератор
Эксперт .NET
7991 / 6995 / 2573
Регистрация: 17.03.2014
Сообщений: 13,572
Записей в блоге: 1
21.08.2017, 19:01 #10
Marchcat, перед записью своих запиши salt. Чтобы упростить разделение salt и оригинальных данных используй буфер равный длине блока алгоритма AES (свойство BlockSize - не забудь поделить его значение на 8 чтобы получить размер в байтах).

Правда здесь еще возникает вопрос - зачем тебе salt в симметричном алгоритме шифрования? В них эту роль выполняет вектор инициализации.
0
Marchcat
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 103
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[] - C#
Приветствую. Есть такая строка - &quot;&quot; Как её перевести в массив байт? 1. Допустим, что первый шаг это через рег. выражения...

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

Operator '||' cannot be applied to operands of type 'byte' and 'byte' - C#
Доброго времени суток! Появилась некоторая проблема в работе с массивом... Есть 2 массива типа 'byte', при операции OR выдаёт ошибку:...

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


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

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

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