SYSLIB0053:AesGcm 应指示所需的标记大小
从 .NET 8 开始,不接受标记大小的 AesGcm 构造函数已过时:
在代码中调用这些方法会在编译时生成警告 SYSLIB0053
。
过时的原因
AES-GCM 支持各种长度(从 12 字节到 16 字节)的标记,具体取决于平台。 以前,AesGcm 类会根据标记本身的大小来确定所需的标记大小。 例如,如果使用 14 字节的标记调用 Decrypt,则假定标记应为 14 字节。
但是,AES-GCM 会通过截断方式来支持这些不同的长度。 AES-GCM 原生生成 16 字节标记,较短的标记通过截断标记来生成。
如果 Decrypt()
的调用方从输入获取标记并按原样传递该标记,则可以有效地允许 Decrypt()
与尽可能短的标记一起使用,从而减少标记的有效大小。
为了帮助消费者确保他们使用正确大小的标记,引入了 AesGcm 的新构造函数,需要预先声明预期标记的大小。 在 Encrypt()
或 Decrypt()
期间,提供的标记参数必须与构造函数中声明的大小匹配。
解决方法
.NET 8 中添加了接受标记大小的新构造函数。 请改用以下构造函数之一:
抑制警告
如果必须使用已过时的 API,可在代码或项目文件中禁止显示警告。
若只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用警告。
// Disable the warning.
#pragma warning disable SYSLIB0053
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0053
若要禁止显示项目中的所有 SYSLIB0053
警告,请将属性 <NoWarn>
添加到项目文件。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0053</NoWarn>
</PropertyGroup>
</Project>
有关详细信息,请参阅取消警告。