RC2 加密和数据包分隔符
本文关键字:分隔符 数据包 加密 RC2 | 更新日期: 2023-09-27 18:35:45
我正在开发一个客户端/服务器应用程序,两者之间的通信是加密的。我正在使用 RC2 加密,因为客户端是嵌入式的,CPU 资源有限。我正在使用System.Security.Cryptography.RC2CryptoServiceProvider.CreateDecryptor/CreateEncryptor方法来创建加密类。
我的问题源于TCP倾向于将消息拆分为多个数据包。由于整个消息可能不会在 Socket.Receive() 的一次调用中到达,所以我需要在出站数据包的末尾包含一个数据包分隔符,以便接收端可以告诉数据包的结束位置(当前使用 0x0D)。但是,RC2 加密最终会在有效负载中的某个位置创建0x0D,导致接收端将数据包解释为已完成。当它尝试解密此截断的数据包时,它将失败。
关于通常如何处理这种事情的任何建议?甚至只是已知 RC2 加密不会产生的字符,我可以用作分隔符?
使用 GregS 的建议,在加密数据包前面加上长度标头,并将数据包分隔符放在加密数据包之后以进行健全性检查。谢谢!