首页 >后端开发 >C++ >为什么我的解密字符串在 .NET 6 中被截断,如何修复?

为什么我的解密字符串在 .NET 6 中被截断,如何修复?

Patricia Arquette
Patricia Arquette原创
2024-12-31 13:03:11428浏览

Why Are My Decrypted Strings Truncated in .NET 6, and How Can I Fix It?

加密字符串:导航 .Net 6 中的更改

问题

在 .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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn