首页 >后端开发 >C++ >为什么从 .NET 5 升级到 .NET 6 后我的字符串解密被切断?

为什么从 .NET 5 升级到 .NET 6 后我的字符串解密被切断?

DDD
DDD原创
2025-01-04 07:52:34311浏览

Why is My String Decryption Cut Off After Upgrading from .NET 5 to .NET 6?

升级到 .NET 6 时的解密问题:字符串加密类

在 .NET 5 项目中,类似于提供的一种解决方案效果很好。然而,升级到 .NET 6 后,解密的字符串在特定点被切断。

问题分析

根本原因在于 .NET 之间的重大更改。 NET 5 和 .NET 6。具体来说,DeflateStream、GZipStream 和 CryptoStream 的行为与其他 Stream 的行为有所不同类型。

分辨率

此更改会影响加密类中的 Decrypt 方法。以前,当调用 cryptoStream.Read 时,预计仅当缓冲区已满或流到达末尾时操作才会完成。然而,在 .NET 6 中,即使只读取了一个字节或底层流返回 0(表示没有更多数据可用),cryptoStream.Read 现在也会完成。

因此,Decrypt 方法需要更新为妥善处理这种行为。一种解决方案是检查 cryptoStream.Read 实际读取了多少字节并确保读取了所有数据:

var plainTextBytes = new byte[cipherTextBytes.Length];
var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);

或者,可以使用 CopyTo 或 StreamReader 来获得更高效、简洁的代码:

using (var plainTextStream = new MemoryStream())
{
    cryptoStream.CopyTo(plainTextStream);
    var plainTextBytes = plainTextStream.ToArray();
    return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length);
}
using (var plainTextReader = new StreamReader(cryptoStream))
{
    return plainTextReader.ReadToEnd();
}

以上是为什么从 .NET 5 升级到 .NET 6 后我的字符串解密被切断?的详细内容。更多信息请关注PHP中文网其他相关文章!

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