2012-05-29 36 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的建议,将加密数据包加上长度标头,并将数据包分隔符放在加密数据包后进行完整性检查。谢谢!