Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 12.01.2014
Сообщений: 33
.NET 4.x

Ошибка при дешифровке поток данных. Заполнение неверно и не может быть удалено

11.02.2024, 11:02. Показов 838. Ответов 5

Студворк — интернет-сервис помощи студентам
Всем привет. При выполнение данного кода, выдает ошибку при дешифрации... Заполнение неверно и не может быть удалено.
Шифрую, отправляю, принимающая сторона корректно принимает и обрабатывает команду.
Возвращает так же зашифрованный поток, который ни в какую не хочет расшифровываться с помощью этого же ключа.

Пробовал так же убирать aesAlg.IV комментировал обе строчки.

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
public static byte[] EncryptStringToBytes_Aes(string plainText, string Key)
        {
            byte[] encrypted;
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.KeySize = 256;
                aesAlg.Mode = CipherMode.ECB;
 
                byte[] byteArrayKey = Enumerable.Range(0, Key.Length)
                     .Where(x => x % 2 == 0)
                     .Select(x => Convert.ToByte(Key.Substring(x, 2), 16))
                     .ToArray();
 
                aesAlg.Key = byteArrayKey;
                aesAlg.IV = new byte[] { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
 
                Console.WriteLine("Encrypt...");
                Console.WriteLine("AesKey: " + Encoding.UTF8.GetString(aesAlg.Key));
                Console.WriteLine("AesIv: " + Encoding.UTF8.GetString(aesAlg.IV));
 
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
                using (System.IO.MemoryStream msEncrypt = new System.IO.MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (System.IO.StreamWriter swEncrypt = new System.IO.StreamWriter(csEncrypt))
                        {
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }
            return encrypted;
        }
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
public static string DecryptStringFromBytes_Aes(string plainText, string Key)
        {
            string decrypted = "";
            using (Aes aesAlg = Aes.Create())
            {
 
                byte[] byteArrayKey = Enumerable.Range(0, Key.Length)
                     .Where(x => x % 2 == 0)
                     .Select(x => Convert.ToByte(Key.Substring(x, 2), 16))
                     .ToArray();
 
 
                aesAlg.Mode = CipherMode.ECB;
                aesAlg.KeySize = 256;
                aesAlg.Key = byteArrayKey;
                aesAlg.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 
                Console.WriteLine("Decrypt...");
                Console.WriteLine("AesKey: " + BitConverter.ToString(aesAlg.Key));
                Console.WriteLine("AesIv: " + BitConverter.ToString(aesAlg.IV));
 
                byte[] cipherText = Convert.FromBase64String(plainText);
 
                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
                try
                {
                    using (MemoryStream msEncrypt = new MemoryStream(cipherText))
                    {
                        using (CryptoStream csDecrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
                        {
                            using (StreamReader swDecrypt = new StreamReader(csDecrypt))
                            {
                                decrypted = swDecrypt.ReadToEnd();
                            }
                        }
                    }
                } catch (Exception ex)
                {
                    Console.WriteLine("Decrypt error: " + ex.Message);
                }
            }
            return decrypted;
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2024, 11:02
Ответы с готовыми решениями:

Заполнение неверно и не может быть удалено
Доброго всем дня! Нужна помощь с дешифровкой сообщения по AES. :help: :help: :help: Получаю ошибку "Заполнение неверно и не...

Шифрация кусками. Заполнение неверно и не может быть удалено
https://www.cyberforum.ru/csharp-beginners/thread1957358.html старая тем для понимания Добавлено через 6 минут При дешефрация...

Заполнение неверно и не может быть удалено AES encoding
Есть два проекта - клиент и сервер, клиент посылает текстовое зашифрованное сообщение на сервер, сервер же со своей стороны принимает...

5
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
11.02.2024, 12:30
С какими данными происходит ошибка, rакой Target Framework и т.д.? Потому что у меня её воспроизвести не получается.

C#
1
2
var enc = EncryptStringToBytes_Aes("Message", "00112233445566778899AABBCCDDEEFF");
var dec = DecryptStringFromBytes_Aes(Convert.ToBase64String(enc), "00112233445566778899AABBCCDDEEFF");
...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
11.02.2024, 14:37
notlive, в приведенном коде нет ошибок. Я тоже как и Someone007 не смог воспроизвести проблему. Вы пишете про передающие и принимающие стороны. Рискну предположить что проблема где-то здесь. Вы скорее пытаетесь дешифровать неполные данные.

P.S. Использование ECB с нулевым вектором инициализации ставит вашу систему защиты под угрозу. Советую переключиться на CBC и постоянно менять вектор инициализации. Его, в отличие ключа, не нужно держать в секрете и можно передавать вместе с сообщением.
0
0 / 0 / 1
Регистрация: 12.01.2014
Сообщений: 33
11.02.2024, 15:03  [ТС]
Дело в том что это не мое желание использовать ECB.

https://aws-microbt-com-bucket... V2.0.5.pdf

Изучите пож-а документацию, может быть она вам подскажет в чем у меня проблема. Я уже всю голову сломал...

Принимающая сторона отвечает и выполняет команды API, возвращает json.

Например, вот данные, которые были отправлены.
Encrypt...
AesKey HEX: 48-D2-FB-5E-58-B5-E2-46-7A-D5-D6-8D-5C-4E-41-68-21-27-1F-8B-9F-C5-36-7D-90-BB-42-C2-A9-80-DC-8A
AesKey: 72, 210, 251, 94, 88, 181, 226, 70, 122, 213, 214, 141, 92, 78, 65, 104, 33, 39, 31, 139, 159, 197, 54, 125, 144, 187, 66, 194, 169, 128, 220, 138
AesIv HEX: 5B-AA-2B-F8-E7-A6-BA-57-9B-E0-F7-1C-C9-7B-EA-92
AesIv: 91, 170, 43, 248, 231, 166, 186, 87, 155, 224, 247, 28, 201, 123, 234, 146
Response: {"enc":"ZLE2ARnyJs2E2OfmxnqCMG23L+FeKjMP Ukw4deTEUALN7MzYWj13NRBhmXnYi8rOXcMw8MVO WhM9PRAjR/2uXCz8AeZMQqFZn8gzMB3IgpVCarbcT0at5gfOz4 0AWVmV"}

Полученный ответ.
JSON
1
{"enc":"ZLE2ARnyJs2E2OfmxnqCMG23L+FeKjMPUkw4deTEUALN7MzYWj13NRBhmXnYi8rOXcMw8MVOWhM9PRAjR/2uXCz8AeZMQqFZn8gzMB3IgpVCarbcT0at5gfOz40AWVmV"}
С этим ключом, дешифровать не получается....
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
11.02.2024, 16:08
Цитата Сообщение от notlive Посмотреть сообщение
Изучите пож-а документацию, может быть она вам подскажет в чем у меня проблема.
Изучение документации не имеет смысла без знания последовательности вызов которые делает ваш код и не видя его. Единственное что в вашем коде вектор инициализации это всегда массив нулей, но даже если изменить код метода DecryptStringFromBytes_Aes так чтобы он принимал вектор, то данные все равно не получается расшифровать. Значит ошибка где-то в другом месте.

Код ваших методов точно не помешает поправить. Обратите внимание на метод FromHexStringToByteArray который парсит строку в байты избегая создания временных строк (.Substring в вашем коде)
Кликните здесь для просмотра всего текста
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
76
77
78
79
80
81
82
83
84
85
public static byte[] EncryptStringToBytes_Aes(string plainText, string Key, string IV)
{
    byte[] encrypted;
    using (Aes aesAlg = Aes.Create())
    {
        aesAlg.KeySize = 256;
        aesAlg.Mode = CipherMode.ECB;
        aesAlg.Key = FromHexStringToByteArray(Key);
        aesAlg.IV = FromHexStringToByteArray(IV);
 
        Console.WriteLine("Encrypt...");
        Console.WriteLine("AesKey: " + Encoding.UTF8.GetString(aesAlg.Key));
        Console.WriteLine("AesIv: " + Encoding.UTF8.GetString(aesAlg.IV));
 
        ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
        using (System.IO.MemoryStream msEncrypt = new System.IO.MemoryStream())
        {
            using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {
                using (System.IO.StreamWriter swEncrypt = new System.IO.StreamWriter(csEncrypt))
                {
                    swEncrypt.Write(plainText);
                }
                encrypted = msEncrypt.ToArray();
            }
        }
    }
    return encrypted;
}
 
public static string DecryptStringFromBytes_Aes(string plainText, string Key, string IV)
{
    string decrypted = "";
    using (Aes aesAlg = Aes.Create())
    {
        aesAlg.Mode = CipherMode.ECB;
        aesAlg.KeySize = 256;
        aesAlg.Key = FromHexStringToByteArray(Key);
        aesAlg.IV = FromHexStringToByteArray(IV);
 
        Console.WriteLine("Decrypt...");
        Console.WriteLine("AesKey: " + BitConverter.ToString(aesAlg.Key));
        Console.WriteLine("AesIv: " + BitConverter.ToString(aesAlg.IV));
 
        byte[] cipherText = Convert.FromBase64String(plainText);
 
        ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
        try
        {
            using (MemoryStream msEncrypt = new MemoryStream(cipherText))
            {
                using (CryptoStream csDecrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader swDecrypt = new StreamReader(csDecrypt))
                    {
                        decrypted = swDecrypt.ReadToEnd();
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Decrypt error: " + ex.Message);
        }
    }
    return decrypted;
}
 
static byte[] FromHexStringToByteArray(string hex)
{
    var outputLength = hex.Length / 2;
    var output = new byte[outputLength];
    for (var i = 0; i < outputLength; i++)
    {
        int b1 = hex[i * 2];
        int b2 = hex[i * 2 + 1];
        b1 -= b1 < 58 ? 48 : (b1 < 97 ? 55 : 87);
        b2 -= b2 < 58 ? 48 : (b2 < 97 ? 55 : 87);
        if (b1 < 0 || b1 > 15) throw new FormatException($"Invalid character in hex string: '{hex[i * 2]}'");
        if (b2 < 0 || b2 > 15) throw new FormatException($"Invalid character in hex string: '{hex[i * 2 + 1]}'");
        output[i] = (byte)((b1 << 4) + b2);
    }
 
    return output;
}
0
0 / 0 / 1
Регистрация: 12.01.2014
Сообщений: 33
11.02.2024, 16:37  [ТС]
Я вывожу HEX только для наглядности, ответ от api приходит, а значит шифрование проходит корректно.
Передаю я Key как string.

Затем из string в byte[]
C#
1
2
3
4
byte[] byteArrayKey = Enumerable.Range(0, Key.Length)
                     .Where(x => x % 2 == 0)
                     .Select(x => Convert.ToByte(Key.Substring(x, 2), 16))
                     .ToArray();
Вот код вызова.
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
// Encrypt the API command
            string apiCmd = plaintext;
 
            // Generate aeskey
            string aesKey = Crypt.CalculateSHA256Hash(key);
 
            // Encrypt the API command
            byte[] encryptedBytes = Crypt.EncryptStringToBytes_Aes(apiCmd, aesKey);
            string ciphertext = Convert.ToBase64String(encryptedBytes);
 
            string enc = "{\"enc\": 1, \"data\": \"" + ciphertext + "\"}";
 
            byte[] data = Encoding.UTF8.GetBytes(enc);
 
            stream.Write(data, 0, data.Length);
 
            data = new Byte[1024];
 
            String responseData = String.Empty;
 
            Int32 bytes = stream.Read(data, 0, data.Length);
            responseData = Encoding.UTF8.GetString(data, 0, bytes);
 
            JObject o = JObject.Parse(responseData);
 
            Console.WriteLine("Response from Miner: " + responseData);
 
            string cipherResult = o["enc"].ToString();
 
            Console.WriteLine(aesKey);
            Console.WriteLine(cipherResult);
 
            string plaintext2 = Crypt.DecryptStringFromBytes_Aes(cipherResult, aesKey);
 
            Console.WriteLine(plaintext2);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.02.2024, 16:37
Помогаю со студенческими работами здесь

AES шифрование. Заполнение неверно и не может быть удалено
На строке cs.Close(); возникает ошибка: Заполнение неверно и не может быть удалено. Что делать? using System; using...

CryptographicException: "заполнение неверно и не может быть удалено."
Здравствуйте. Подскажите пожалуйста. Делаю ПО с привязкой к железу, шифрование идет как нужно. Вот код: public void...

Заполнение не верно и не может быть удалено | AES
Прошу помочь, сервер выбивает ошибку: Заполнение не верно и не может быть удалено (System.Security.Cryptography) Похоже проблема в...

Может ли быть ошибка при передаче данных?
есть функция: CalculateMovingAverage(&amp;RMSSmoothLenghtM1, URMS.Channel1M, URMSSmooth.Channel1M); такая обработка правильная будет? ...

Программа не доходит до процедуры ClrAll при правильном вводе данных. В чём может быть ошибка?
Программа не доходит до процедуры ClrAll при правильном вводе данных. В чём может быть ошибка?uses crt; procedure ClrAll(A: Array of...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru