在 .Net 6 中,使用自定义加密类解密的加密字符串被截断在某个时刻。这与 .Net 5 中的行为不同,.Net 5 中返回了完整的解密字符串。
差异源于 .Net 6 中影响 DeflateStream、GZipStream、和加密流。以前,只有当传递给读取操作的缓冲区完全填满或到达流末尾时,这些流才会完成读取操作。
在 .Net 6 中,此行为已更改。现在,当至少读取一个字节或底层流返回 0 时,读取操作完成,表明没有更多数据可用。
在提供的代码中,错误显示在 Decrypt 方法中,调用 Read 方法时不检查实际读取的字节数。这可能会导致解密字符串被截断。
为了纠正此问题,代码可以采用保护措施来验证读取的字节数并确保读取完整的流。另一种方法是在解码数据之前使用 Stream.CopyTo 方法将所有加密字节从 CryptoStream 传输到另一个内存流。
解密 UTF8 文本的更佳解决方案是使用 StreamReader。 ReadToEnd 方法,将整个流读取为字符串。
通过采用这些措施,开发人员可以确保 .Net 6 中字符串的准确解密,避免任何意外截断。
以上是为什么我的解密字符串在 .NET 6 中被截断,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!