.NET 11 以降では、 RSACryptoServiceProvider.Encrypt(Byte[], Boolean) メソッドと RSACryptoServiceProvider.Decrypt(Byte[], Boolean) メソッドは廃止されました。 コードでこれらのメソッドを呼び出すと、コンパイル時に警告 SYSLIB0064 が生成されます。
廃止の理由
fOAEP パラメーターがtrueされている場合、これらのメソッドは常に、最適な非対称暗号化パディング (OAEP) のダイジェスト アルゴリズムとして SHA-1 を使用します。 ハッシュ アルゴリズムは暗黙的であり、変更することはできません。 代わりに、明示的な RSAEncryptionPadding 引数を受け入れるオーバーロードを使用します。 これらのオーバーロードにより、ハッシュ アルゴリズムが明示的になり、ハッシュ アルゴリズムを選択する際の柔軟性が向上し、OAEP-SHA-1 の誤った使用を回避するのに役立ちます。 OAEP が必要な場合は、互換性のために SHA-1 が必要な場合を除き、既定でRSAEncryptionPadding.OaepSHA256に移行する代わりに、RSAEncryptionPadding.OaepSHA1以上を優先します。
対処法
古いオーバーロードの呼び出しを、 RSAEncryptionPadding 引数を受け入れる対応するオーバーロードに置き換えます。
| 古い呼び出し | Replacement |
|---|---|
Encrypt(data, fOAEP: true) |
Encrypt(data, RSAEncryptionPadding.OaepSHA1) |
Encrypt(data, fOAEP: false) |
Encrypt(data, RSAEncryptionPadding.Pkcs1) |
Decrypt(data, fOAEP: true) |
Decrypt(data, RSAEncryptionPadding.OaepSHA1) |
Decrypt(data, fOAEP: false) |
Decrypt(data, RSAEncryptionPadding.Pkcs1) |
警告を抑制する
古い API を使用する必要がある場合は、コードまたはプロジェクト ファイルで警告を抑制できます。
単一の違反だけを抑制するには、ソース ファイルにプリプロセッサ ディレクティブを追加して警告を無効にしてから、再度有効にします。
// Disable the warning.
#pragma warning disable SYSLIB0064
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0064
プロジェクトですべての SYSLIB0064 警告を抑制するには、プロジェクト ファイルに <NoWarn> プロパティを追加します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0064</NoWarn>
</PropertyGroup>
</Project>
詳細については、「警告を表示しない」を参照してください。
.NET