Compartilhar via


SYSLIB0060: alguns construtores Rfc2898DeriveBytes estão obsoletos

A partir do .NET 10, todos os construtores em System.Security.Cryptography.Rfc2898DeriveBytes são obsoletos. Chamar esses construtores no código gera o aviso SYSLIB0060 em tempo de compilação.

Motivo da obsoletidade

A implementação baseada em instância do PBKDF2, que System.Security.Cryptography.Rfc2898DeriveBytes fornece, oferece um uso fora do padrão ao transmitir (via streaming) bytes de volta, permitindo chamadas sucessivas para GetBytes. Esse não é o uso pretendido de PBKDF2; o algoritmo deve ser usado de uma vez só. 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 as instâncias de System.Security.Cryptography.Rfc2898DeriveBytes e as chamadas para GetBytes para usar o método estático único Rfc2898DeriveBytes.Pbkdf2.

Por exemplo, altere:

using System.Security.Cryptography;

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

até

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 desabilitar e, em seguida, habilitar novamente 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 arquivo de projeto.

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

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