次の方法で共有


SYSLIB0060: Rfc2898DeriveBytes コンストラクターは廃止されました

.NET 10 以降では、System.Security.Cryptography.Rfc2898DeriveBytes 上のすべてのコンストラクターは廃止されています。 コードでこれらのコンストラクターを呼び出すと、コンパイル時に警告 SYSLIB0060 が生成されます。

廃止の理由

System.Security.Cryptography.Rfc2898DeriveBytes が提供する PBKDF2 のインスタンスベース実装では、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 を使用する必要がある場合は、コードまたはプロジェクト ファイルで警告を抑制できます。

1 つの違反のみを抑制するには、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、警告を再度有効にします。

// 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>

詳細については、「警告を抑制する」を参照してください。