重建CryptoStream需要多少开销?

时间:2013-04-11 13:59:31

标签: c# encryption

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

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

  

您应该始终显式关闭CryptoStream对象   通过调用Close方法完成它。这样做可以冲洗   流并导致所有剩余的数据块被处理   CryptoStream对象。

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

1 个答案:

答案 0 :(得分:2)

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