Некоторое время назад я начал программировать свое собственное приложение AES, чтобы больше узнать о шифровании.Мне удалось заставить все приложение работать, за исключением одной вещи, с которой я все еще борюсь.
Вот такой сценарий: когда пользователь хочет расшифровать файлы, он должен ввести пароль, чтобы расшифровать файлы с помощью,Однако, когда пользователь вводит неправильный пароль, дешифрование должно завершиться неудачно.Я знаю, что когда CryptoStream создает исключение CryptoGraphicException, это означает, что что-то пошло не так, что в этом случае расшифровывается с неверным паролем.Я дам сообщение типа: «Заполнение недопустимо и не может быть удалено».
Проблема в том, что когда пользователь расшифровывает с неверным паролем, он все равно пишет новый файл, который будет содержать дешифрованное содержимое.Я действительно хочу предотвратить это, потому что он, по-видимому, изменяет содержимое зашифрованного файла, что делает его невозможным для его дальнейшего дешифрования.
Мой код дешифрования выглядит следующим образом:
using (AesManaged aesManaged = new AesManaged())
{
//Console.WriteLine("Decrypting file using " + aesManaged.Mode + ", block size " + aesManaged.BlockSize + " and padding mode " + aesManaged.Padding + "...");
byte[] salt = GetSaltFromCiphertext(cipherText);
byte[] initializationVector = GetInitializationVectorFromCiphertext(cipherText);
byte[] fileContentToDecrypt = GetContentFromCiphertext(cipherText);
//Initialize the AES instance with the key and the initialization vector
aesManaged.Key = GenerateKey(password, salt);
aesManaged.IV = initializationVector;
using (FileStream fileStream = new FileStream("../../Files/" + fileNameAndExtension, FileMode.Create))
{
using (CryptoStream cryptoStream = new CryptoStream(fileStream, aesManaged.CreateDecryptor(), CryptoStreamMode.Write))
{
cryptoStream.Write(fileContentToDecrypt, 0, fileContentToDecrypt.Length);
}
}
}
Как сделатья запрещаю CryptoStream или FileStream записывать что-либо в файл, когда пользователь расшифровывает с неверным паролем?Я генерирую ключ шифрования из пароля, используя PBKDF2.