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>
詳細については、「警告を抑制する」を参照してください。
.NET