Compartilhar via


SYSLIB0053: o AesGcm deve indicar o tamanho da marca necessária

Os construtores AesGcm que não aceitam um tamanho de marca são obsoletos, a partir do .NET 8:

Chamá-los no código gera aviso SYSLIB0053 em tempo de compilação.

Motivo da obsolescência

O AES-GCM dá suporte a marcas de vários comprimentos, de 12 a 16 bytes, dependendo da plataforma. Anteriormente, a classe AesGcm determinava o tamanho da marca desejado com base no tamanho da marca em si. Por exemplo, se Decrypt tivesse sido chamado com uma marca de 14 bytes, supõe-se que a marca deveria ser de 14 bytes.

No entanto, o AES-GCM dá suporte a esses vários comprimentos por truncamento. O AES-GCM produz nativamente 16 marcas de byte, e marcas mais curtas são produzidas truncando a marca.

Se os chamadores de Decrypt() obtiverem a marca da entrada e passarem a marca como está, isso efetivamente permitirá que Decrypt() seja usado com a marca mais curta possível, o que reduz o tamanho efetivo da marca.

Para ajudar os consumidores a garantir que eles estejam usando marcas do tamanho correto, novos construtores para AesGcm foram introduzidos que exigem declarar o tamanho da marca esperada antecipadamente. Durante Encrypt() ou Decrypt(), o parâmetro de marca fornecido deve corresponder ao tamanho declarado no construtor.

Solução alternativa

Novos construtores que aceitam um tamanho de marca foram adicionados ao .NET 8. Em vez disso, use um destes construtores:

Suprimir um aviso

Se for necessário usar as APIs obsoletas, você poderá suprimir o aviso no código ou no arquivo de projeto.

Para suprimir apenas uma violação única, adicione as diretivas de pré-processador ao arquivo de origem para desabilitar e, em seguida, reabilite o aviso.

// Disable the warning.
#pragma warning disable SYSLIB0053

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0053

Para suprimir todos os avisos SYSLIB0053 no projeto, adicione uma propriedade <NoWarn> ao arquivo de projeto.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0053</NoWarn>
  </PropertyGroup>
</Project>

Para obter mais informações, confira Suprimir avisos.