2012-05-29 70 views
1

我正在處理客戶端/服務器應用程序,兩者之間的通信是加密的。我正在使用RC2加密,因爲客戶端已嵌入且CPU資源有限。我正在使用System.Security.Cryptography.RC2CryptoServiceProvider.CreateDecryptor/CreateEncryptor方法來創建加密類。RC2加密和數據包分隔符

我的問題源於TCP傾向於將消息拆分爲多個數據包。因爲整個消息可能不會到達Socket.Receive()的一個調用中,所以我需要在出站數據包的末尾包含一個數據包分隔符,以便接收端可以知道數據包的結束位置(當前使用0x0D)。但是,RC2加密最終會在有效負載的某處創建一個0x0D,導致接收端將該數據包解釋爲完成。當它試圖解密這個被截斷的數據包時,它會失敗。

有關這種事情通常如何處理的任何建議?或者甚至只是一個RC2加密已知的字符,不會產生我可以用作分隔符的字符?

+1

請不要在「(C#)」等前加上標題。這就是標籤的用途。 –

+0

你可以發佈相關的接收代碼嗎? –

+1

正常情況下,這是通過在密文數據包前加一個長度的頭來完成的。然後解密器首先讀取長度並知道從TCP流中讀取很多字節。但是,這仍然會讓您遇到TLS已經找到並解決的所有其他缺陷。 –

回答

0

使用GregS的建議,將加密數據包加上長度標頭,並將數據包分隔符放在加密數據包後進行完整性檢查。謝謝!