问题摘要:
将 .NET 项目更新为版本 6 中,人们发现与之前相比,加密字符串的解密会导致输出部分被截断原始输入。具体来说,解密字符串的一部分被截断,长度差异一致。
原因:
该问题源于影响 .NET 6 的重大更改像 CryptoStream 这样的流。以前,这些流的行为独特,直到所有提供的缓冲区空间被填满或到达流末尾时才完成读取操作。
使用 .NET 6,这些流现在与其他流的行为更加一致。如果使用长度为 N 的缓冲区执行读取操作,则在满足以下任一条件时完成:
代码影响:
在提供的加密/解密代码中,正在使用的 CryptoStream 未正确考虑此更改。具体来说,代码无法检查解密过程中是否读取并返回所有字节。
解决方案:
要解决此问题,需要修改代码以确保它在解密期间读取所有可用字节。这可以通过使用以下方法之一来实现:
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 6 后我的解密字符串被截断?的详细内容。更多信息请关注PHP中文网其他相关文章!