Partilhar via


SYSLIB0064: RSACryptoServiceProvider.Encrypt e Decrypt com fOAEP estão obsoletos

A partir do .NET 11, os RSACryptoServiceProvider.Encrypt(Byte[], Boolean) métodos e RSACryptoServiceProvider.Decrypt(Byte[], Boolean) estão obsoletos. Chamar estes métodos em código gera avisos SYSLIB0064 em tempo de compilação.

Motivo da obsolescência

Quando o fOAEP parâmetro é true, estes métodos utilizam sempre SHA-1 como algoritmo de resumo para o Preenchimento de Encriptação Assimétrica Ótima (OAEP). O algoritmo de hash é implícito e não pode ser alterado. Use sobrecargas que aceitem um argumento explícito RSAEncryptionPadding em vez disso. Estas sobrecargas tornam o algoritmo de hash explícito, dão-lhe mais flexibilidade na escolha de um algoritmo de hash e ajudam a evitar o uso acidental do OAEP-SHA-1. Quando precisares de OAEP, prefere RSAEncryptionPadding.OaepSHA256 ou seja mais forte em vez de migrar para RSAEncryptionPadding.OaepSHA1 por defeito, a menos que precises de SHA-1 para compatibilidade.

Solução

Substitua chamadas para as sobrecargas obsoletas pelas correspondentes sobrecargas que aceitam um RSAEncryptionPadding argumento:

Chamada obsoleta Substituição
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)

Suprimir um aviso

Se você precisar usar a API obsoleta, poderá suprimir o aviso no código ou no arquivo de projeto.

Para suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desativar e reativar o aviso.

// Disable the warning.
#pragma warning disable SYSLIB0064

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

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

Para suprimir todos os avisos de SYSLIB0064 em seu projeto, adicione uma propriedade <NoWarn> ao seu arquivo de projeto.

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

Para obter mais informações, consulte Suprimir avisos.