gpt4 book ai didi

c# - 在同一 CryptoStream 上使用 BinaryReader 和 BinaryWriter 时如何避免超时?

转载 作者:行者123 更新时间:2023-11-30 17:41:33 24 4
gpt4 key购买 nike

我有一个程序使用 BinaryReaderBinaryWriter 来发送 stringintbyte [] 网络上的消息。

消息的顺序和内容对于服务器和客户端的执行流程都很重要,但持续时间永远不会太长。

现在我正在尝试加密所有内容。

这是我对实际代码的新包装:

using encReaderStream = CryptoStream(clientStream, myAES.CreateDecryptor(), CryptoStreamMode.Read),\
encWriterStream = CryptoStream(clientStream, myAES.CreateEncryptor(), CryptoStreamMode.Write),\
enc_reader = BinaryReader(encReaderStream),\
enc_writer = BinaryWriter(encWriterStream):
....

这个例子是 boo 代码,但在这个例子中它在直觉上应该等同于 C#。

现在发生的是,服务器使用 enc_reader.ReadString() 正确获取第一条加密消息,并使用 enc_writer.Write("Accepted") 进行应答。但客户永远得不到答案。

我测试了消息的顺序是否重要,确实如此。如果我改为从服务器发送一个字符串开始,那么客户端会收到它,但如果我继续发送消息,我很快就会遇到同样的情况。

我有一些想法,CryptoStream 可能负责与 BinaryReader/BinaryWriter 正确合作,但我不知道如何很好地解决这个问题方式。

我的服务器有很多功能,只需要一个BinaryReader 和一个BinaryWriter,如果它们能像以前一样工作,那将非常方便。

编辑:

我还在一个小型 C# 项目中复制了这种情况 here ,使用上述带有 CTR 模式的 AES 实现。

最佳答案

您不能在 block 中间刷新 block 密码,因为从算法的角度来看,这些字节还没有准备好。他们不确定。

最好的解决方法可能是使用流密码。 .NET 对此的内置支持很差。引入以计数器模式实现 AES 的库。

请注意,如果不使用经过身份验证的加密(而且看起来您并不打算这样做),攻击者可以编辑数据,尽管他们无法读取数据。使用 AES-GCM 进行缓解。


后来我们发现您使用的CTR模式库坏了。使用这个:

public int InputBlockSize { get { return 1; } }
public int OutputBlockSize { get { return 1; } }

关于c# - 在同一 CryptoStream 上使用 BinaryReader 和 BinaryWriter 时如何避免超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32802134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com