Condividi tramite


SYSLIB0064: RSACryptoServiceProvider.Encrypt e Decrypt con fOAEP sono obsoleti

A partire da .NET 11, i RSACryptoServiceProvider.Encrypt(Byte[], Boolean) metodi e RSACryptoServiceProvider.Decrypt(Byte[], Boolean) sono obsoleti. La chiamata di questi metodi nel codice genera un avviso SYSLIB0064 in fase di compilazione.

Motivo dell'obsoletione

Quando il fOAEP parametro è true, questi metodi usano sempre SHA-1 come algoritmo digest per il riempimento OAEP (Optimal Asymmetric Encryption Padding). L'algoritmo hash è implicito e non può essere modificato. Usare invece overload che accettano un argomento esplicito RSAEncryptionPadding. Questi overload rendono esplicito l'algoritmo hash, offrono maggiore flessibilità quando si sceglie un algoritmo hash e consentono di evitare l'uso accidentale di OAEP-SHA-1. Quando è necessario OAEP, preferire RSAEncryptionPadding.OaepSHA256 o più forte anziché eseguire la migrazione a RSAEncryptionPadding.OaepSHA1 per impostazione predefinita, a meno che non sia necessario SHA-1 per la compatibilità.

Soluzione

Sostituire le chiamate agli overload obsoleti con i corrispondenti overload che accettano l'argomento RSAEncryptionPadding.

Chiamata obsoleta Sostituzione
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)

Eliminare un avviso

Se è necessario usare l'API obsoleta, è possibile eliminare l'avviso nel codice o nel file di progetto.

Per eliminare solo una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare l'avviso.

// Disable the warning.
#pragma warning disable SYSLIB0064

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

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

Per eliminare tutti gli avvisi di SYSLIB0064 nel progetto, aggiungere una proprietà <NoWarn> al file di progetto.

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

Per ulteriori informazioni, vedere Sopprimere gli avvisi.