Я пишу простое приложение, в котором пользователи могут шифровать / дешифровать файлы с помощью одного из алгоритмов блоков, таких как Rijndael.Я должен также зашифровать ключ сессии с помощью того же алгоритма и сохранить его вместе с зашифрованным текстом в файле XML.Ключ, используемый для шифрования сеансового ключа, представляет собой SHA256-хэш пароля пользователя.В результате получается что-то вроде:
<File>
<EncryptedKey>session key encrypted with user's password hash</EncryptedKey>
<Data>Data encrypted with session key</Data>
</File>
Во время дешифрования пользователя просят ввести пароль, затем генерируется хеш, который используется в качестве ключа для дешифрования EncryptedKey из файла XML, а затем может использоваться ключ сеансарасшифровать данные.
Работает, когда пользователь вводит правильный пароль, но я хочу, чтобы приложение расшифровывало файл, даже если пароль неправильный.Я использую Bouncy Castle, и теперь, когда пароль неправильный (поэтому ключ сессии также неверен), он выдает исключение «Блок Pad поврежден».Я не хочу отображать сообщения, сообщающие о возникновении ошибки.Вместо этого я все равно хочу расшифровать файл и в результате просто сохранить мусор.Это возможно?Мой код для расшифровки:
IBufferedCipher cipher = CipherUtilities.GetCipher("Rijndael/ECB/PKCS7Padding");
KeyParameter par = new KeyParameter(generateHash(password));
cipher.Init(false, par);
byte[] output = cipher.DoFinal(data); // Exception here when password is wrong
Я также пытался сначала использовать метод ProcessBytes () и DoFinal () в конце, но он тоже не работал.