Sdílet prostřednictvím


SYSLIB0060: Konstruktory Rfc2898DeriveBytes jsou zastaralé

Počínaje rozhraním .NET 10 jsou všechny konstruktory na System.Security.Cryptography.Rfc2898DeriveBytes zastaralé. Volání těchto konstruktorů v kódu generuje upozornění SYSLIB0060 v době kompilace.

Důvod zastaralosti

Implementace PBKDF2 založená na instancích, kterou poskytuje System.Security.Cryptography.Rfc2898DeriveBytes, nabízí nestandardní využití tím, že "streamuje" bajty zpět a umožňuje postupná volání GetBytes. Nejedná se o zamýšlené použití PBKDF2; algoritmus by se měl použít jako jednorázová akce. Jednorázová funkce existuje jako statická metoda Rfc2898DeriveBytes.Pbkdf2 a měla by se použít místo instancování System.Security.Cryptography.Rfc2898DeriveBytes.

Alternativní řešení

Změňte instance System.Security.Cryptography.Rfc2898DeriveBytes a volání GetBytes tak, aby místo toho používaly Rfc2898DeriveBytes.Pbkdf2 statickou metodu pro jednorázové použití.

Můžete například změnit:

using System.Security.Cryptography;

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

k

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

Potlačení upozornění

Pokud musíte použít zastaralé rozhraní API, můžete potlačit upozornění v kódu nebo v souboru projektu.

Chcete-li potlačit pouze jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, které chcete zakázat a znovu povolit upozornění.

// Disable the warning.
#pragma warning disable SYSLIB0060

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

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

Pokud chcete potlačit všechna upozornění SYSLIB0060 v projektu, přidejte do souboru projektu vlastnost <NoWarn>.

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

Další informace naleznete v tématu Potlačení upozornění.