SYSLIB0064: RSACryptoServiceProvider.Encrypt och Decrypt med fOAEP är föråldrade

Från och med .NET 11 är metoderna RSACryptoServiceProvider.Encrypt(Byte[], Boolean) och RSACryptoServiceProvider.Decrypt(Byte[], Boolean) föråldrade. Om du anropar dessa metoder i koden genereras en varning SYSLIB0064 vid kompileringstillfället.

Orsak till obsoletion

När parametern fOAEP är trueanvänder dessa metoder alltid SHA-1 som sammanfattande algoritm för optimal asymmetrisk krypteringsutfyllnad (OAEP). Hash-algoritmen är implicit och kan inte ändras. Använd överlagringar som accepterar ett explicit RSAEncryptionPadding argument i stället. Dessa överlagringar gör hash-algoritmen explicit, ger dig mer flexibilitet när du väljer en hash-algoritm och hjälper dig att undvika oavsiktlig användning av OAEP-SHA-1. När du behöver OAEP, föredrar RSAEncryptionPadding.OaepSHA256 eller är starkare i stället för att migrera till RSAEncryptionPadding.OaepSHA1 som standard, såvida du inte behöver SHA-1 för kompatibilitet.

Workaround

Ersätt anrop till föråldrade överlagringar med motsvarande överlagringar som accepterar ett RSAEncryptionPadding argument:

Inaktuellt anrop Ersättning
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)

Undertryck en varning

Om du måste använda det föråldrade API:et kan du utelämna varningen i koden eller i projektfilen.

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan varningen.

// Disable the warning.
#pragma warning disable SYSLIB0064

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

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

Om du vill ignorera alla SYSLIB0064 varningar i projektet lägger du till en <NoWarn>-egenskap i projektfilen.

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

För mer information, se Undertrycka varningar.