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>

有关详细信息,请参阅取消警告