如何让.NET CryptoStream读取最后一个块

时间:2013-12-19 01:14:04

标签: c# aes cryptostream

我在TcpClient的NetWorkStream两端都有一个使用CryptoStream的客户端/服务器设置。当我直接从NetworkStream读取时,通信工作非常有效,但是使用CryptoStream我无法读取单个可用数据块。我正在关闭CryptoStream以使服务器调用FlushLastBlock,实际上在客户端显示了唯一的16字节块(AES加密)。那么,当有完整的数据块可用时,为什么CryptoStream.Read()会阻塞等待数据呢?

P.S。我已经确认发送一个额外的块允许读者读取第一个块。这只是一个错误还是设计?

1 个答案:

答案 0 :(得分:0)

您是否在发送方的CryptoStream上调用了FlushFinalBlock()?

using (var stream = new MemoryStream())
{
    using (var cs = new CryptoStream(stream, your_encryptor, CryptoStreamMode.Write))
    {
        your_formatter.Serialize(cs, your_graph);
        cs.FlushFinalBlock();
        your_socket.Send(stream.GetBuffer(), 0, (int)stream.Length);
    }
}