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



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

附言我已经验证了发送额外的块允许读者读取第一个块。这只是一个错误还是设计使然?

您是否在

发送端的 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);
    }
}

相关内容

  • 没有找到相关文章

最新更新