Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/103: Рейтинг темы: голосов - 103, средняя оценка - 4.78
36 / 34 / 20
Регистрация: 17.03.2015
Сообщений: 175
.NET 4.x

CryptographicException: "заполнение неверно и не может быть удалено."

02.06.2017, 16:17. Показов 20703. Ответов 5

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Подскажите пожалуйста.
Делаю ПО с привязкой к железу, шифрование идет как нужно.
Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void GenerelKey(string path, string inString)
        {
            byte[] key = new byte[0x20];
 
            for (int i = 0; i <= 0x1f; i++)
                key[i] = 0x1f;
            _rijndaelManaged.Key = key;
 
            ICryptoTransform _cryptoTransform = _rijndaelManaged.CreateEncryptor();
            FileStream fStream = new FileStream(path, FileMode.Create);
            fStream.Write(_rijndaelManaged.IV, 0, _rijndaelManaged.IV.Length);
            CryptoStream cStream = new CryptoStream(fStream, _cryptoTransform, CryptoStreamMode.Write);
            StreamWriter wStream = new StreamWriter(cStream);
            wStream.Write(inString);
            wStream.Flush();
            cStream.FlushFinalBlock();
            wStream.Close();
        }
А вот когда запускаю приложение, то, при дешифровки, возникает исключение CryptographicException: "заполнение неверно и не может быть удалено.";

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
public bool DecodeKey(string inString, string path)
        {
            _rijndaelManaged = new RijndaelManaged();
 
            string decryptstring = string.Empty;
            byte[] key = new byte[0x20];
            for (int i = 0; i <= 0x1f; i++)
                key[i] = 0xff;
            _rijndaelManaged.Key = key;
            FileStream fStream = new FileStream(path, FileMode.Open);
            byte[] IV = new byte[_rijndaelManaged.IV.Length];
            fStream.Read(IV, 0, IV.Length);
            _rijndaelManaged.IV = IV;
            ICryptoTransform _cryptoTransform = _rijndaelManaged.CreateDecryptor();
            CryptoStream cStream = new CryptoStream(fStream, _cryptoTransform, CryptoStreamMode.Read);
            StreamReader sRead = new StreamReader(cStream);
            
            decryptstring = sRead.ReadToEnd();
            
            if (!(decryptstring == inString))
                return false;
            else
                return true;
        }
Подскажите пожалуйста, в чем ошибка?
Буду очень благодарен за помощь! Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2017, 16:17
Ответы с готовыми решениями:

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

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

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

5
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18295 / 14219 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
02.06.2017, 17:43
Лучший ответ Сообщение было отмечено Dragon7788 как решение

Решение

Цитата Сообщение от Dragon7788 Посмотреть сообщение
C#
1
2
3
key[i] = 0x1f;
...
key[i] = 0xff;
Сыграем в игру "найди отличие"?
1
36 / 34 / 20
Регистрация: 17.03.2015
Сообщений: 175
06.06.2017, 00:08  [ТС]
И снова здравствуйте! Недавно создавал такую же тему, но проблема вернулась.
Подскажите пожалуйста, в чем ошибка:
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
public bool DecodeKey(string inString, string path)
        {
            _rijndaelManaged = new RijndaelManaged();
            string _decryptString = null;
            byte[] key = new byte[0x20];
 
            for (int i = 0; i <= 0x1f; i++)
                key[i] = 0x1f;
            
            _rijndaelManaged.Key = key;
            
            FileStream _fStream = new FileStream(path, FileMode.Open);
            byte[] IV = new byte[_rijndaelManaged.IV.Length];
            _fStream.Read(IV, 0, IV.Length);
            _rijndaelManaged.IV = IV;
            
            ICryptoTransform _iCryptoTransform = _rijndaelManaged.CreateDecryptor();
            
            CryptoStream _cStream = new CryptoStream(_fStream, _iCryptoTransform, CryptoStreamMode.Read);
            StreamReader _sRead = new StreamReader(_cStream);
            
            _decryptString = _sRead.ReadToEnd();
            
            if (!(_decryptString == inString))
                return false;
            else
                return true;
        }
В строке _decryptString = _sRead.ReadToEnd(); и выдает ошибку.

Не могу разобраться вот... хотя думаю проблема очень даже и проста....

Добавлено через 33 минуты
OwenGlendower, подскажите пожалуйста, если не трудно)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18295 / 14219 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
06.06.2017, 00:46
Dragon7788, ошибки с ключом точно нет? Данные расшифровываются тем же ключом что и зашифровались?

Кстати почему ты используешь ключ с одинаковыми байтами?

Не по теме:

P.S. Советую НЕ называть локальные переменные с подчеркиванием в начале. Это принято использовать для закрытых экземплярных полей класса

0
36 / 34 / 20
Регистрация: 17.03.2015
Сообщений: 175
06.06.2017, 01:20  [ТС]
OwenGlendower, Хм, теперь почему-то перестал работать и шифратор. Вчера все работало нормально...
Вот это шифратор.
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
public void GenerelKey(string path, string inString)
        {
            byte[] key;
            int i;
 
            ICryptoTransform _iCrypTransform;
            CryptoStream _cryptoStream;
            FileStream _fileStream;
            StreamWriter _streamWriter;
            
 
            try
            {
                key = new byte[0x20];
 
                for (i = 0; i <= 0x1f; i++)
                    key[i] = 0x1f;
                _rijndaelManaged.Key = key;
 
                _iCrypTransform = _rijndaelManaged.CreateDecryptor();
 
                _fileStream = new FileStream(path, FileMode.Create);
                _fileStream.Write(_rijndaelManaged.IV, 0, _rijndaelManaged.IV.Length);
 
                _cryptoStream = new CryptoStream(_fileStream, _iCrypTransform, CryptoStreamMode.Write);
 
                _streamWriter = new StreamWriter(_cryptoStream);
                _streamWriter.Write(inString);
                _streamWriter.Flush();
 
                _cryptoStream.FlushFinalBlock();
                _streamWriter.Close();
            }
            catch(CryptographicException cException)
            {
                MessageBox.Show(cException.ToString(), "CryptographicException",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }
Ошибка тут возникает на _cryptoStream.FlushFinalBlock();
По поводу подчеркиваний понял, спасибо за подсказку)

Добавлено через 2 минуты
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Кстати почему ты используешь ключ с одинаковыми байтами?
Дело в том, что я взял этот код с форума... Он работал, все было хорошо.
Если вы подскажите как будет правильнее сделать шифрование и дешифрование, я буду очень благодарен!
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18295 / 14219 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
07.06.2017, 16:12
Цитата Сообщение от Dragon7788 Посмотреть сообщение
Хм, теперь почему-то перестал работать и шифратор.
Ошибка снова в невнимательности. В строке №20 в методе GenerelKey создается дешифратор
C#
1
_iCrypTransform = _rijndaelManaged.CreateDecryptor();
а нужен разумеется шифратор
C#
1
_iCrypTransform = _rijndaelManaged.CreateEncryptor();
Что касается ключа, то сгенерируй случайный набор из 32 байтов и используй в качестве ключа. Не забудь сохранить его в безопасном месте где посторонние не имеют к нему доступа. Заодно можно немного улучшить код методов
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
public bool DecodeKey(string path, byte[] key, string inString)
{
    string decryptString;
    
    using (var rijndaelManaged = new RijndaelManaged())
    using (FileStream fStream = new FileStream(path, FileMode.Open))
    {
        rijndaelManaged.Key = key;
    
        byte[] IV = new byte[rijndaelManaged.IV.Length];
        fStream.Read(IV, 0, IV.Length);
        rijndaelManaged.IV = IV;
    
        using (var decryptor = rijndaelManaged.CreateDecryptor())
        using (var cStream = new CryptoStream(fStream, decryptor, CryptoStreamMode.Read))
        using (var reader = new StreamReader(cStream))
        {
            decryptString = reader.ReadToEnd();
        }
    }
    return decryptString == inString;
}
 
public void GenerelKey(string path, byte[] key, string inString)
{
    try
    {
        using (var rijndaelManaged = new RijndaelManaged())
        using (FileStream fStream = new FileStream(path, FileMode.Create))
        {
            rijndaelManaged.Key = key;
            
            fStream.Write(rijndaelManaged.IV, 0, rijndaelManaged.IV.Length);
        
            using (var encryptor = rijndaelManaged.CreateEncryptor())
            using (var cStream = new CryptoStream(fStream, encryptor, CryptoStreamMode.Write))
            using (var writer = new StreamWriter(cStream))
            {
                writer.Write(inString);
            }
        }
    }
    catch(CryptographicException cException)
    {
        MessageBox.Show(cException.ToString(), "CryptographicException", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.06.2017, 16:12
Помогаю со студенческими работами здесь

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

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

Неверно происходит чтение файла. Что может быть не так ?
Доброго времени суток ! Пожалуйста, помогите исправить ошибки. Столкнулся с такой проблемой, данные считываются из файла, но неверно. В...

"В поле может быть введено только одно слово, пробелы могут быть или не быть с начала слова и в конце"
Добрый вечер уважаемые форумчане. Подскажите как написать выражение со след условием: -в поле может быть введено только одно слово,...

Из файла удалить все слова, содержащие от трех до пяти символов, но при этом из каждой строки должно быть удалено только
Из файла удалить все слова, содержащие от трех до пяти символов, но при этом из каждой строки должно быть удалено только четное количество...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru