Udostępnij za pośrednictwem


SYSLIB0060: konstruktory klasy Rfc2898DeriveBytes są przestarzałe

Począwszy od platformy .NET 10, wszystkie konstruktory w System.Security.Cryptography.Rfc2898DeriveBytes są przestarzałe. Wywołanie tych konstruktorów w kodzie generuje ostrzeżenie SYSLIB0060 w czasie kompilacji.

Przyczyna wycofania z użycia

Implementacja PBKDF2 oparta na instancji, którą zapewnia System.Security.Cryptography.Rfc2898DeriveBytes, oferuje niestandardowe użycie przez strumieniowanie bajtów z powrotem, umożliwiając kolejne wywołania do GetBytes. Nie jest to zamierzone użycie PBKDF2; algorytm powinien być używany w jednorazowej operacji. Funkcjonalność jednorazowego zastosowania jest dostępna jako metoda statyczna Rfc2898DeriveBytes.Pbkdf2 i powinna być używana zamiast instancjonowania System.Security.Cryptography.Rfc2898DeriveBytes.

Obejście

Zmień wystąpienia System.Security.Cryptography.Rfc2898DeriveBytes i wywołania do GetBytes na użycie jednorazowej metody statycznej Rfc2898DeriveBytes.Pbkdf2.

Na przykład zmień:

using System.Security.Cryptography;

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

do

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

Pomijanie ostrzeżenia

Jeśli musisz użyć przestarzałego interfejsu API, możesz pominąć ostrzeżenie w kodzie lub w pliku projektu.

Aby pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć ostrzeżenie.

// Disable the warning.
#pragma warning disable SYSLIB0060

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

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

Aby pominąć wszystkie ostrzeżenia SYSLIB0060 w projekcie, dodaj właściwość <NoWarn> do pliku projektu.

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

Aby uzyskać więcej informacji, zobacz Pomijanie ostrzeżeń.