2011-05-24 4 views
0

Я пытаюсь расшифровать зашифрованный массив байтов (шифровать с помощью K1 и расшифровывать с помощью K2). Visual Studio генерирует исключение «BAD DATA», когда он пытается закрыть мой Crypto класс, сформированный с учетом способностей учащихся Ошибка дешифрования DES «Плохие данные» в C# при закрытии криптостома

вот мой фрагмент кода DES дешифрования

public Byte[] Decrypt(Byte[] cipherData, Byte[] key, Byte[] iv) 
    { 
     MemoryStream ms = new MemoryStream(); 
     DES mDES = DES.Create(); 
     mDES.Key = key; 
     mDES.IV = iv; 
     mDES.Padding = PaddingMode.PKCS7; 
     CryptoStream cs = new CryptoStream(ms, mDES.CreateDecryptor(), CryptoStreamMode.Write); 
     cs.Write(cipherData, 0, cipherData.Length); 
     cs.Close(); 
     Byte[] decryptedData = ms.ToArray(); 
     return decryptedData; 
    } 

начальный вектор такой же, как шифрование. Я не знаю, почему эта ошибка произошла.

Добавлено: В соответствии с рекомендациями Greg B, я выкладываю здесь мой фрагмент кода шифрования. Результатом шифрования является ввод дешифрования (две разные клавиши)

 public Byte[] Decrypt(Byte[] cipherData, Byte[] key, Byte[] iv) 
    { 
     MemoryStream ms = new MemoryStream(); 
     DES mDES = DES.Create(); 
     mDES.Key = key; 
     mDES.IV = iv; 
     mDES.Padding = PaddingMode.PKCS7; 
     CryptoStream cs = new CryptoStream(ms, mDES.CreateDecryptor(), CryptoStreamMode.Write); 
     cs.Write(cipherData, 0, cipherData.Length); 
     cs.Close(); 
     Byte[] decryptedData = ms.ToArray(); 
     return decryptedData; 
    } 
+0

Если он бросает исключение при расшифровке , возможно, что-то не так с вашей программой шифрования. Возможно, стоит разместить этот код тоже ... –

+0

Посмотрите здесь: http://stackoverflow.com/questions/5591361/c-bad-data-exception-when-decrypting-encrypted-file –

+0

Я посмотрел ссылку, предложенную Алирезе, но мне кажется, что он не разрешает мою проблему :( –

ответ

2

Проблема, с которой вы столкнулись, происходит из выбранного режима заполнения.

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

если вы хотите rebuld someething как 3DES с использованием класса PaddingMode NONE DES для вашего дешифрования и на следующем этапе шифрования (так только первого шифрования или последнего дешифрования используется набивка)

+0

спасибо. это именно моя проблема. – StarCub

+0

спасибо! хороший намек! –

Смежные вопросы