MatDK
2021-10-20 15:03:13 +08:00
有没有可能是这样。 例如你用 chacha20 加密了 data1,2,3,4,5,长度都为 64 。
前面的 data1,2,3 是分别以 tcp1,2,3 packet 的形式到达的,当然没有问题
到了 data4,5 可能被合并成了 1 个 tcp packet 4,长度 128,接收方并不知道这是 2 个 64 合并成的(不知道你有没有加控制字节)。
在加密时用了 2 个 64 的 keystream 。但是解密的时候直接用了 1 个 128 的 keystream,数据就不对了。
当然可能是我理解有问题....我没理解你用 chacha20 加密流,是持续的[接受 1 个,加密 1 个,发出 1 个],还是[接受 1 个 /多个,加密 x 个定长的块,发送 x 个]。
你如果用 tcp 加密的话,升级到 tls 不就行了?把 tls 的 send,recv callback 换成你自己的。tls 会有控制字节告诉接收方到底有多少数据被加密