Принудительно расшифровать файл с неправильным ключом - C # + Bouncy Castle - PullRequest
0 голосов
/ 10 мая 2011

Я пишу простое приложение, в котором пользователи могут шифровать / дешифровать файлы с помощью одного из алгоритмов блоков, таких как 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 () в конце, но он тоже не работал.

1 Ответ

2 голосов
/ 10 мая 2011

Это довольно неплохо в первую очередь не поддается шифрованию. Предположительно, вы могли бы перехватить исключение и в своем блоке catch записать ненужные данные (возможно, шестнадцатеричный дамп стека исключений?) В файл - но почему? Как отметил Ramhound, это дало бы злонамеренные пользовательские данные, которые можно было бы использовать при атаке методом перебора, чтобы сравнить с тем, когда они успешно расшифровали файл.

Я хотел бы вернуться к фазе предположений / разработки этого: почему вы не хотите показывать сообщение, которое гласит: «Предоставленный пароль не соответствует ожидаемому паролю. Пожалуйста, введите заново. 3 попытки остаются». (или как там)? Что получается при выводе «мусорного» файла?

...