Я пытаюсь расшифровать некоторые данные, которые я получаю через сокет TCP. Это выполняется с использованием класса RijndaelManaged
в режиме CFB. Моя проблема в том, что я не уверен, как я должен расшифровать данные, так как я имею дело только с несколькими байтами (от 8 до 20 в зависимости от сообщения). Когда я звоню TransformFinalBlock
с 10 байт byte[]
Я получаю исключение с сообщением: «Длина данных для дешифрования недействительна». Если я вызываю TransformBlock
с этими 10 байтами, я получаю: «Значение было недопустимым». Итак, вот мои вопросы:Расшифровка небольшого количества байтов с использованием AES
- Сообщение, которое я получаю, имеет длину остальной части сообщения в первых 4 байтах. Как я могу дешифровать только эти байты, чтобы определить длину для продолжения чтения?
- Даже если я временно жестко закодирую количество байтов для чтения до 10 (для этого конкретного сообщения) и прочитал их из сети, как я могу дешифровать эти 10 байтов?
Я также пробовал использовать CryptoStream
, чтобы прочитать его с моего NetworkStream
. Тем не менее, любые запросы на чтение, похоже, блокируются бесконечно. У меня такое чувство, что он ожидает, что будет отправлено больше данных (возможно, полный размер байта в байтах).
У меня нет доступа к другому узлу, который отправляет эти данные в сети, поэтому я не могу изменить протокол, чтобы включить незашифрованные байты в начале, которые указывают длину или что-то еще. Кроме того, предположительно, есть другие люди, общающиеся с этим успешно, поэтому это должно быть возможно.
Я действительно не знаю ответа, но это связано с криптографическим дополнением. На самом деле можно шифровать неполные блоки блочным шифром без каких-либо накладных расходов. – usr
Почему бы не дождаться оставшихся байтов? – sprinter252
@usr yes Я думаю, что какой-то тип заполнения вручную поможет мне решить # 2, но я до сих пор не знаю, что делать с # 1. – Dennis