Получение исключения «неверные данные» при расшифровке DES в .NET - PullRequest
0 голосов
/ 10 октября 2011

В C # .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

1 Ответ

0 голосов
/ 10 октября 2011

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

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

...