Partilhar via


SYSLIB0060: os construtores Rfc2898DeriveBytes estão obsoletos

A partir do .NET 10, todos os construtores no System.Security.Cryptography.Rfc2898DeriveBytes estão obsoletos. Chamar estes construtores no código gera um aviso SYSLIB0060 durante a compilação.

Motivo da obsolescência

A implementação baseada em instância do PBKDF2, que System.Security.Cryptography.Rfc2898DeriveBytes fornece, oferece um uso não padrão, transmitindo bytes de volta ao permitir chamadas sucessivas para GetBytes. Esta não é a utilização pretendida do PBKDF2; o algoritmo deve ser usado apenas uma vez. A funcionalidade one-shot existe como o método estático Rfc2898DeriveBytes.Pbkdf2 e deve ser usada em vez de instanciar System.Security.Cryptography.Rfc2898DeriveBytes.

Solução alternativa

Altere instâncias de System.Security.Cryptography.Rfc2898DeriveBytes e chamadas para GetBytes para usar o método estático one-shot Rfc2898DeriveBytes.Pbkdf2.

Por exemplo, altere:

using System.Security.Cryptography;

Rfc2898DeriveBytes kdf = new Rfc2898DeriveBytes(password, salt, iterations, hashAlgorithm);
byte[] derivedKey = kdf.GetBytes(64);

Para

byte[] derivedKey = Rfc2898DeriveBytes.Pbkdf2(password, salt, iterations, hashAlgorithm, 64);

Suprimir um aviso

Se você precisar usar a API obsoleta, poderá suprimir o aviso no código ou no arquivo de projeto.

Para suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desativar e reativar o aviso.

// Disable the warning.
#pragma warning disable SYSLIB0060

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

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

Para suprimir todos os avisos de SYSLIB0060 em seu projeto, adicione uma propriedade <NoWarn> ao seu arquivo de projeto.

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

Para obter mais informações, consulte Eliminar avisos.