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ń.