SYSLIB0064: RSACryptoServiceProvider.Encrypt y Decrypt con fOAEP están obsoletos

A partir de .NET 11, los RSACryptoServiceProvider.Encrypt(Byte[], Boolean) métodos y RSACryptoServiceProvider.Decrypt(Byte[], Boolean) están obsoletos. Llamar a estos métodos en el código genera una advertencia SYSLIB0064 en tiempo de compilación.

Motivo de la obsolescencia

Cuando el fOAEP parámetro es true, estos métodos siempre usan SHA-1 como algoritmo de resumen para el relleno óptimo de cifrado asimétrico (OAEP). El algoritmo hash es implícito y no se puede cambiar. En su lugar, utilice sobrecargas que acepten un argumento explícito RSAEncryptionPadding. Estas sobrecargas hacen que el algoritmo hash sea explícito, proporcione más flexibilidad al elegir un algoritmo hash y le ayude a evitar el uso accidental de OAEP-SHA-1. Cuando requiera OAEP, prefiera RSAEncryptionPadding.OaepSHA256 o uno más seguro en lugar de migrar por defecto a RSAEncryptionPadding.OaepSHA1, a menos que precise SHA-1 para compatibilidad.

Solución alternativa

Reemplace las llamadas a las sobrecargas obsoletas por las sobrecargas correspondientes que aceptan un argumento RSAEncryptionPadding.

Llamada obsoleta 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)

Supresión de una advertencia

Si debe usar la API obsoleta, puede suprimir la advertencia en el código o en el archivo del proyecto.

Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y luego volver a habilitar la advertencia.

// Disable the warning.
#pragma warning disable SYSLIB0064

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

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

Para suprimir todas las advertencias SYSLIB0064 del proyecto, agregue una propiedad <NoWarn> al archivo del proyecto.

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

Para obtener más información, vea Suprimir advertencias.