Teilen über


SYSLIB0060: Rfc2898DeriveBytes-Konstruktoren sind veraltet

Ab .NET 10 sind alle Konstruktoren für System.Security.Cryptography.Rfc2898DeriveBytes veraltet. Das Aufrufen dieser Konstruktoren im Code erzeugt Warnung SYSLIB0060 während der Kompilierung.

Grund für das Auslaufen

Die instanzbasierte Implementierung von PBKDF2, die System.Security.Cryptography.Rfc2898DeriveBytes bereitstellt, bietet eine nicht standardmäßige Nutzung, indem Bytes „zurückgestreamt“ werden, indem aufeinanderfolgende Aufrufe an GetBytes zugelassen werden. Dies ist nicht die beabsichtigte Verwendung von PBKDF2; der Algorithmus sollte als einmaliger Vorgang verwendet werden. Die Einmalfunktion ist als statische Methode Rfc2898DeriveBytes.Pbkdf2 vorhanden und sollte anstelle der Instanziierung von System.Security.Cryptography.Rfc2898DeriveBytes verwendet werden.

Problemumgehung

Ändern Sie die Instanzen von System.Security.Cryptography.Rfc2898DeriveBytes und die Aufrufe von GetBytes, um stattdessen die einmalige statische Methode Rfc2898DeriveBytes.Pbkdf2 zu verwenden.

Ändern Sie z. B. Folgendes:

using System.Security.Cryptography;

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

Bis

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

Unterdrücken einer Warnung

Wenn Sie die veraltete API verwenden müssen, können Sie die Warnung im Code oder in der Projektdatei unterdrücken.

Um nur einen einzelnen Verstoß zu unterdrücken, fügen Sie Ihrer Quelldatei Präprozessordirektiven hinzu, um die Warnung zu deaktivieren und dann erneut zu aktivieren.

// Disable the warning.
#pragma warning disable SYSLIB0060

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

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

Um alle SYSLIB0060 Warnungen in Ihrem Projekt zu unterdrücken, fügen Sie Ihrer Projektdatei eine <NoWarn> Eigenschaft hinzu.

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

Weitere Informationen finden Sie unter Unterdrücken von Warnungen.