Condividi tramite


SYSLIB0060: I costruttori Rfc2898DeriveBytes sono obsoleti

A partire da .NET 10, tutti i costruttori in System.Security.Cryptography.Rfc2898DeriveBytes sono obsoleti. La chiamata a questi costruttori nel codice genera un avviso SYSLIB0060 in fase di compilazione.

Motivo dell'obsoletione

L'implementazione basata su istanza di PBKDF2, fornita da System.Security.Cryptography.Rfc2898DeriveBytes, offre un utilizzo non standard trasmettendo byte attraverso chiamate successive a GetBytes. Questo non è l'uso previsto di PBKDF2; l'algoritmo deve essere usato come singolo colpo. La funzionalità one-shot esiste come metodo statico Rfc2898DeriveBytes.Pbkdf2 e deve essere usata invece di istanziare System.Security.Cryptography.Rfc2898DeriveBytes.

Soluzione alternativa

Modificare le istanze di System.Security.Cryptography.Rfc2898DeriveBytes e le chiamate a GetBytes per utilizzare invece il metodo statico one-shot Rfc2898DeriveBytes.Pbkdf2.

Ad esempio, modificare:

using System.Security.Cryptography;

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

a

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

Eliminare un avviso

Se è necessario usare l'API obsoleta, è possibile eliminare l'avviso nel codice o nel file di progetto.

Per eliminare solo una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare l'avviso.

// Disable the warning.
#pragma warning disable SYSLIB0060

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

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

Per eliminare tutti gli avvisi di SYSLIB0060 nel progetto, aggiungere una proprietà <NoWarn> al file di progetto.

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

Per altre informazioni, vedere Eliminare gli avvisi.