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

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

Barbara Streisand
发布: 2025-01-01 09:52:09
原创
144 人浏览过

Why is my .NET 6 string decryption truncated after upgrading from .NET 5?

升级到 .Net 6 时出现问题 - 加密字符串

将项目从 .Net 5 升级到 .Net 6 时出现问题使用加密/解密类解密字符串时出现问题。结果是根据输入字符串的长度在某个点截断的解密字符串。

原因

流相关类的行为发生变化例如 .Net 6 中的 CryptoStream。在以前的版本中,这些类在完成读取操作之前从缓冲区读取所有字节或到达流的末尾。在 .Net 6 中,它们在读取至少一个字节后或从底层流的读取调用返回 0 后完成。

受影响的代码

问题出现在加密类的 Decrypt 方法,特别是使用缓冲区从 CryptoStream 读取解密的字节已修复:

var plainTextBytes = new byte[cipherTextBytes.Length];
var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
登录后复制

解决方案

要解决该问题,需要检查 CryptoStream 实际读取的字节数并相应调整读取。这可以通过在读取操作后检查 MemoryStream 的 Length 属性来完成。

或者,更好的方法是使用 CryptoStream 的 CopyTo 方法或直接在 CryptoStream 之上创建 StreamReader。这些方法确保读取并返回所有解密的字节:

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

// Usando StreamReader
using (var plainTextReader = new StreamReader(cryptoStream))
{
    return plainTextReader.ReadToEnd();
}
登录后复制

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板