Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A partir do .NET 10, todos os construtores em System.Security.Cryptography.Rfc2898DeriveBytes são obsoletos. Chamar esses construtores no código gera o aviso SYSLIB0060 em tempo de compilação.
Motivo da obsoletidade
A implementação baseada em instância do PBKDF2, que System.Security.Cryptography.Rfc2898DeriveBytes fornece, oferece um uso fora do padrão ao transmitir (via streaming) bytes de volta, permitindo chamadas sucessivas para GetBytes. Esse não é o uso pretendido de PBKDF2; o algoritmo deve ser usado de uma vez só. A funcionalidade one-shot existe como o método estático Rfc2898DeriveBytes.Pbkdf2 e deve ser usada em vez de instanciar System.Security.Cryptography.Rfc2898DeriveBytes.
Solução alternativa
Altere as instâncias de System.Security.Cryptography.Rfc2898DeriveBytes e as chamadas para GetBytes para usar o método estático único Rfc2898DeriveBytes.Pbkdf2.
Por exemplo, altere este código:
Rfc2898DeriveBytes kdf = new Rfc2898DeriveBytes(password, salt, iterations, hashAlgorithm);
byte[] derivedKey = kdf.GetBytes(64);
Para isso:
byte[] derivedKey = Rfc2898DeriveBytes.Pbkdf2(password, salt, iterations, hashAlgorithm, 64);
Se você usou um construtor Rfc2898DeriveBytes que aceita um tamanho de sal, precisará gerar manualmente o sal (Rfc2898DeriveBytes.Pbkdf2 não possui uma sobrecarga que aceite um tamanho de sal).
Para obter consistência com a implementação anterior, use RandomNumberGenerator.Fill para preencher uma matriz existente com bytes criptograficamente seguros ou RandomNumberGenerator.GetBytes para criar uma nova matriz com bytes criptograficamente seguros.
Por exemplo, altere este código:
Rfc2898DeriveBytes kdf = new Rfc2898DeriveBytes(password, saltSize, iterations, hashAlgorithm);
byte[] salt = kdf.Salt;
byte[] derivedKey = kdf.GetBytes(64);
Para isso:
byte[] salt = RandomNumberGenerator.GetBytes(saltSize);
byte[] derivedKey = Rfc2898DeriveBytes.Pbkdf2(password, salt, iterations, hashAlgorithm, 64);
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 desabilitar e, em seguida, habilitar novamente o aviso.
// Disable the warning.
#pragma warning disable SYSLIB0060
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0060
Para suprimir todos os avisos de SYSLIB0060 em seu projeto, adicione uma propriedade <NoWarn> ao arquivo de projeto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0060</NoWarn>
</PropertyGroup>
</Project>
Para obter mais informações, consulte Suprimir avisos.