2

在过去的几天里,我一直在努力解决一个问题:在进行公钥交换 + 登录后,我的端点切换到Rijndael对称加密模式来加密客户端和服务器之间的消息。

问题是,我创建了加密流并让它保持开放,认为这是最好的方法,因为通道将用于发送多个连接。当我这样做时,加密永远不会完全输出到基本流。根据 msdn,它说:

使用完 CryptoStream 对象后,应始终通过调用 Close 方法显式关闭它。这样做会刷新流并导致所有剩余的数据块由 CryptoStream 对象处理。

为发送的每条消息重建它似乎需要很多开销。是否有某种原因,或者我只是错过了什么?

4

1 回答 1

2

AES(Rijndael) 使用固定大小的块,因此输出可以是块大小的倍数。如果输入未与块大小对齐,则对其进行填充。解密时,此填充将被删除。要知道要添加多少填充,AES 需要知道确切的流长度。并且可以在流结束时(关闭后)确定该长度。

于 2013-04-11T14:04:39.070 回答