SYSLIB0064: Az RSACryptoServiceProvider.Encrypt és Decrypt fOAEP-pel elavultnak számítanak

A .NET 11-től kezdve a RSACryptoServiceProvider.Encrypt(Byte[], Boolean) és a RSACryptoServiceProvider.Decrypt(Byte[], Boolean) metódusok elavultak. Ezeknek a metódusoknak a kódban való meghívása figyelmeztetést SYSLIB0064 generál fordításkor.

Az elavulás oka

Ha a paraméter azfOAEP, ezek a true metódusok mindig SHA-1-et használnak az optimális aszimmetrikus titkosítási padding (OAEP) emésztő algoritmusaként. A kivonatoló algoritmus implicit, és nem módosítható. Használjon olyan túlterheléseket, amelyek explicit RSAEncryptionPadding argumentumot fogadnak el inkább. Ezek a túlterhelések egyértelművé teszik a kivonatoló algoritmust, nagyobb rugalmasságot biztosítanak a kivonatoló algoritmus kiválasztásakor, és segítenek elkerülni az OAEP-SHA-1 véletlen használatát. Ha OAEP-re van szüksége, inkább RSAEncryptionPadding.OaepSHA256 vagy erősebb megoldást válasszon, ahelyett, hogy alapértelmezés szerint RSAEncryptionPadding.OaepSHA1-re váltana, kivéve, ha kompatibilitási okokból SHA-1-re van szüksége.

Megoldás

Cserélje le az elavult túlterhelésekre irányuló hívásokat az argumentumot RSAEncryptionPadding elfogadó megfelelő túlterhelésekre:

Elavult hívás 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)

Figyelmeztetés mellőzése

Ha az elavult API-t kell használnia, letilthatja a figyelmeztetést a kódban vagy a projektfájlban.

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz, hogy letiltsa, majd engedélyezze újra a figyelmeztetést.

// Disable the warning.
#pragma warning disable SYSLIB0064

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

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

Ha el szeretné tiltani a projekt összes SYSLIB0064 figyelmeztetését, adjon hozzá egy <NoWarn> tulajdonságot a projektfájlhoz.

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

További információ: Figyelmeztetések letiltása.