SYSLIB0060: Az Rfc2898DeriveBytes konstruktorok elavultak

A .NET 10-től kezdve a System.Security.Cryptography.Rfc2898DeriveBytes összes konstruktora elavult. A konstruktorok kódban való meghívása figyelmeztetést SYSLIB0060 generál fordításkor.

Az elavulás oka

A PBKDF2 példányalapú implementációja, amelyet a System.Security.Cryptography.Rfc2898DeriveBytes biztosít, lehetővé teszi a nem szabványos használatot azáltal, hogy a bájtokat egymást követő hívásokkal "folyamatosan közvetíti" a GetBytes-nek. Ez nem a PBKDF2 tervezett használata; az algoritmust egylövetűként kell használni. Az egylövetű funkció a Rfc2898DeriveBytes.Pbkdf2 statikus metódusként létezik, és ezt kell használni a System.Security.Cryptography.Rfc2898DeriveBytespéldányosítása helyett.

Áthidaló megoldás

Módosítsa a System.Security.Cryptography.Rfc2898DeriveBytes példányait, és hívásoknál használja a GetBytes egyszeri statikus metódust ahelyett, hogy Rfc2898DeriveBytes.Pbkdf2-et hívna.

Módosítsa például ezt a kódot:

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

Ehhez:

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

Ha olyan Rfc2898DeriveBytes konstruktort használt, amely sóméret megadását igényli, manuálisan kell létrehoznia a sót, mivel a Rfc2898DeriveBytes.Pbkdf2 nem rendelkezik olyan konstruktor változattal, amely sóméretet fogad el. Az előző implementációval való konzisztenciához használjon RandomNumberGenerator.Fill egy meglévő tömböt kriptográfiailag biztonságos bájtokkal való kitöltéshez, vagy RandomNumberGenerator.GetBytes hozzon létre egy új tömböt kriptográfiailag biztonságos bájtokkal.

Módosítsa például ezt a kódot:

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

Ehhez:

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

Figyelmeztetés mellőzése

Ha az elavult API-t kell használnia, letilthatja a figyelmeztetést a kódban vagy a projektfájlban.

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz, hogy letiltsa, majd engedélyezze újra a figyelmeztetést.

// Disable the warning.
#pragma warning disable SYSLIB0060

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

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

Ha el szeretné tiltani a projekt összes SYSLIB0060 figyelmeztetését, adjon hozzá egy <NoWarn> tulajdonságot a projektfájlhoz.

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

További információ: Figyelmeztetések letiltása.