Получение исключения Bad Data при расшифровке DES в .NET

В С#.NET я хочу расшифровать некоторые данные, которые ранее были зашифрованы алгоритмом DES, и просто иметь ключ, но не IV! Я получаю исключение при чтении из потока. что я должен написать? вот мой код:

byte[] byaText = new byte[] { 0x91, 0x6e , 0x6e , 0x75, 0x76 , 0xa5 , 0x73 , 0x55 };
byte[] byaKey = new byte[] { 0x9B, 0x43, 0xBF, 0x66, 0x98, 0xDE, 0x67, 0xFB };
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
cryptoProvider.Mode = CipherMode.ECB; // even when remarking this line exception occures
MemoryStream memoryStream = new MemoryStream(byaRes);
ICryptoTransform ict = cryptoProvider.CreateDecryptor(byaKey, byaKey); // even "new byte[] {0,0,0,0,0,0,0,0}" as IV, exception occures
CryptoStream cryptoStream = new CryptoStream(memoryStream,
    ict, CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cryptoStream);
string decrypted = reader.ReadToEnd(); // here the exception 'Bad Data' occures

person losingsleeep    schedule 10.10.2011    source источник
comment
Если нет IV, как он был зашифрован?   -  person Marc L.    schedule 10.10.2011
comment
@Mark L. Из кода это похоже на режим ECB (тьфу), который не требует IV.   -  person rossum    schedule 10.10.2011
comment
я не знаю, как он зашифрован, и не уверен, что это EBC, но у меня есть инструмент C++, который расшифровывает его, не требуя IV. Зачем? как это работает? (я положу сюда)   -  person losingsleeep    schedule 11.10.2011


Ответы (1)


У вас может быть исключение заполнения. Проверьте, какое заполнение использует отправитель, возможно, PKCS5, и убедитесь, что ваша функция расшифровки ожидает такое же заполнение.

Режим ECB не является безопасным. Если возможно, переключитесь на режим CBC режима CTR. В Википедии есть хорошая иллюстрация (буквально) того, почему режим ECB небезопасен: (ЕЦБ)

person rossum    schedule 10.10.2011