SYSLIB0041: Alcuni costruttori Rfc2898DeriveBytes sono obsoleti
I costruttori Rfc2898DeriveBytes seguenti sono obsoleti, a partire da .NET 7. Il loro uso nel codice genera un avviso SYSLIB0041
in fase di compilazione.
- Rfc2898DeriveBytes(String, Byte[])
- Rfc2898DeriveBytes(String, Int32)
- Rfc2898DeriveBytes(Byte[], Byte[], Int32)
- Rfc2898DeriveBytes(String, Byte[], Int32)
- Rfc2898DeriveBytes(String, Int32, Int32)
Questi overload rendono predefinito l'algoritmo hash o il numero di iterazioni e le impostazioni predefinite non sono più considerate sicure. Questi sono tutti i costruttori disponibili in .NET 4.7.1 e versioni precedenti. In futuro, è consigliabile usare solo i costruttori più recenti.
Soluzione alternativa
Usare un overload del costruttore diverso in cui sia possibile specificare in modo esplicito il numero di iterazioni (il valore predefinito è 1000) e il nome dell'algoritmo hash (il valore predefinito è HashAlgorithmName.SHA1).
Se si usa il numero di iterazioni predefinito o l'algoritmo hash predefinito, è consigliabile passare a valori più sicuri, ovvero un numero di iterazioni più elevato o un algoritmo hash più recente.
Eliminare un avviso
Se è necessario usare le API obsolete, è 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 SYSLIB0041
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0041
Per eliminare tutti gli avvisi SYSLIB0041
nel progetto, aggiungere una proprietà <NoWarn>
al file di progetto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0041</NoWarn>
</PropertyGroup>
</Project>
Per altre informazioni, vedere Non visualizzare gli avvisi.