1

我正在开发一个客户端/服务器应用程序,并且两者之间的通信是加密的。我正在使用 RC2 加密,因为客户端是嵌入式的并且 CPU 资源是有限的。我正在使用 System.Security.Cryptography.RC2CryptoServiceProvider.CreateDecryptor/CreateEncryptor 方法来创建加密类。

我的问题源于 TCP 倾向于将消息拆分为多个数据包。因为整个消息可能不会在一次 Socket.Receive() 调用中到达,所以我需要在出站数据包的末尾包含一个数据包分隔符,以便接收端可以知道数据包的结束位置(当前使用 0x0D)。但是,RC2 加密最终会在负载中的某处创建 0x0D,导致接收端将数据包解释为已完成。当它试图解密这个被截断的数据包时,它失败了。

关于通常如何处理这类事情的任何建议?或者甚至只是一个已知 RC2 加密不会产生我可以用作分隔符的字符?

4

1 回答 1

0

使用 GregS 的建议在加密数据包前加上长度标头,并将数据包分隔符放在加密数据包之后以进行完整性检查。谢谢!

于 2012-06-15T21:43:18.683 回答