Вроде продолжения предыдущего вопроса, я много гуглил, но я не думаю, что я на правильном пути. По сути, я делаю, открывая файл с сегментом кода следующим образом:
byte[] cipherText = File.ReadAllBytes(encryptedFile);
Затем передача этого байтового массива статическому методу bool, который вызывает фактический метод дешифрования и возвращает true, если не было выдано криптографическое исключение. В моей основной форме у меня есть нажатие кнопки, которая вызывает статический bool из оператора If, разблокирование некоторых дополнительных элементов интерфейса, если оно возвращается true, и вывод сообщения «неверный пароль», если он возвращает false.
Я прошел весь процесс, и он выдает «Заполнение недопустимо и не может быть удалено». исключение, которое обнаружил какой-то поиск, который должен произойти, если указан неправильный ключ дешифрования. Я знаю, что передаю тот же ключ, по крайней мере, набираю его, поэтому я предполагаю, что проблема связана либо с тем, как передается byte [], либо с самими потоками. Вот пример метода дешифрования:
public static string Decrypt(string password, byte[] ciphertext)
{
byte[] key, iv;
CreateKeyIV(password, out key, out iv);
using (MemoryStream encrypted = new MemoryStream(ciphertext))
using (CryptoStream dec = new CryptoStream(encrypted, _algorithm.CreateDecryptor(key, iv), CryptoStreamMode.Read))
using (StreamReader reader = new StreamReader(dec))
{
try
{
return reader.ReadToEnd();
}
catch (CryptographicException)
{
throw new CryptographicException("Invalid password.");
}
finally
{
encrypted.Close();
dec.Close();
reader.Close();
}
}
}
Кто-нибудь видит, чего мне не хватает?