Бөлісу құралы:


SYSLIB0060: конструкторы Rfc2898DeriveBytes устарели

Начиная с .NET 10 все конструкторы на System.Security.Cryptography.Rfc2898DeriveBytes устарели. Вызов этих конструкторов в коде создает предупреждение SYSLIB0060 во время компиляции.

Причина устаревания

Реализация PBKDF2 на основе экземпляров, предоставляемая System.Security.Cryptography.Rfc2898DeriveBytes, предлагает нестандартное использование, позволяя последовательным вызовам GetBytesвозвращать поток байтов. Это не то, как следует использовать PBKDF2; алгоритм должен применяться как одноразовая операция. Функция однократного снимка существует как статический метод Rfc2898DeriveBytes.Pbkdf2 и должна использоваться вместо создания экземпляров System.Security.Cryptography.Rfc2898DeriveBytes.

Обходное решение

Измените экземпляры System.Security.Cryptography.Rfc2898DeriveBytes и вызовы к GetBytes на использование однократного статического метода Rfc2898DeriveBytes.Pbkdf2.

Например, измените:

using System.Security.Cryptography;

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

Кому

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

Подавление предупреждения

Если необходимо использовать устаревший API, вы можете отключить предупреждение в коде или в файле проекта.

Чтобы отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить предупреждение.

// Disable the warning.
#pragma warning disable SYSLIB0060

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

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

Чтобы отключить все предупреждения SYSLIB0060 в проекте, добавьте свойство <NoWarn> в файл проекта.

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

Дополнительные сведения см. в разделе Подавление предупреждений.