SYSLIB0060: Rfc2898DeriveBytes-konstruktorer är föråldrade

Från och med .NET 10 är alla konstruktorer på System.Security.Cryptography.Rfc2898DeriveBytes föråldrade. Att anropa dessa konstruktorer i kod genererar en varning SYSLIB0060 vid kompileringstillfället.

Orsak till obsoletion

Den instansbaserade implementeringen av PBKDF2, som System.Security.Cryptography.Rfc2898DeriveBytes tillhandahåller, erbjuder en icke-standardanvändning genom att strömma tillbaka byte och tillåta efterföljande anrop till GetBytes. Detta är inte den avsedda användningen av PBKDF2; algoritmen ska användas i en engångsanvändning. Engångsfunktionaliteten finns som den statiska metoden Rfc2898DeriveBytes.Pbkdf2 och bör användas istället för att instansiera System.Security.Cryptography.Rfc2898DeriveBytes.

Lösning

Byt ut instanser av System.Security.Cryptography.Rfc2898DeriveBytes och anrop till GetBytes så att du använder Rfc2898DeriveBytes.Pbkdf2:s statiska engångsanropsmetod istället.

Ändra till exempel:

using System.Security.Cryptography;

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

till

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

Undertrycka en varning

Om du måste använda det föråldrade API:et kan du utelämna varningen i koden eller i projektfilen.

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan varningen.

// Disable the warning.
#pragma warning disable SYSLIB0060

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

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

Om du vill ignorera alla SYSLIB0060 varningar i projektet lägger du till en <NoWarn>-egenskap i projektfilen.

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

Mer information finns i Utelämna varningar.