我試圖解密一些通過TCP套接字接收的數據。這是在CFB模式下使用RijndaelManaged
類來完成的。我的問題是,我不知道我應該如何解密數據,因爲我只處理幾個字節(8到20取決於消息)。當我使用10字節byte[]
呼叫TransformFinalBlock
時,我收到一條異常消息:「要解密的數據的長度無效。」如果我撥打TransformBlock
並獲得這10個字節:「價值無效。」所以這裏是我的問題:使用AES解密少量字節
- 我收到的消息的長度在前4個字節中的消息的其餘部分。我怎麼能解密這些字節來確定繼續閱讀的長度?
- 即使我暫時將要讀取的字節數編碼爲10(針對此特定消息)並從網絡讀取這些字節,如何解密這10個字節?
我也嘗試過使用CryptoStream
來讓它直接從我的NetworkStream
中讀取。但是,任何讀取調用似乎都會無限期地阻止。我有一種感覺,它期待更多的數據被髮送(可能是一個完整的塊大小的字節)。
我無法訪問在網絡上發送此數據的其他節點,因此我無法將協議更改爲在開始時包含未加密的字節,以指示長度或任何內容。此外,據推測,還有其他人與此成功溝通,因此它必須是可能的。
我真的不知道答案,但這與密碼填充有關。實際上可以使用分組密碼對不完整的塊進行加密,而無需任何開銷。 – usr 2012-02-08 22:32:50
爲什麼不等待剩餘的字節? – sprinter252 2012-02-08 22:32:57
@usr yes我認爲某些類型的手動填充可以幫助我解決#2,但我仍然不知道如何處理#1。 – Dennis 2012-02-08 22:36:12