SYSLIB0007: Implementazioni predefinite degli algoritmi di crittografia non supportate
Il sistema di configurazione crittografica in .NET Framework non consente una corretta agilità crittografica e non è presente in .NET Core e .NET 5+. I requisiti di compatibilità con le versioni precedenti di .NET impediscono inoltre al framework di aggiornare determinate API crittografiche per tenere il passo con i progressi della crittografia. Di conseguenza, le API seguenti sono contrassegnate come obsolete, a partire da .NET 5. L'uso di queste API genera un avviso SYSLIB0007
in fase di compilazione e PlatformNotSupportedException in fase di esecuzione.
- System.Security.Cryptography.AsymmetricAlgorithm.Create()
- System.Security.Cryptography.HashAlgorithm.Create()
- System.Security.Cryptography.HMAC.Create()
- System.Security.Cryptography.KeyedHashAlgorithm.Create()
- System.Security.Cryptography.SymmetricAlgorithm.Create()
Soluzioni alternative
Il corso d'azione consigliato consiste nel sostituire le chiamate alle API ormai obsolete con chiamate a metodi factory per algoritmi specifici, ad esempio Aes.Create(). In questo modo si ottiene il controllo completo sugli algoritmi di cui viene creata un'istanza.
Se è necessario mantenere la compatibilità con i payload esistenti generati dalle app .NET Framework che usano le API obsolete, usare le sostituzioni suggerite nella tabella seguente. La tabella fornisce un mapping dagli algoritmi predefiniti di .NET Framework ai rispettivi equivalenti di .NET 5+.
.NET Framework Sostituzione compatibili di .NET Core/.NET 5+ Osservazioni: AsymmetricAlgorithm.Create() RSA.Create() HashAlgorithm.Create() SHA1.Create() L'algoritmo SHA-1 viene considerato obsoleto. È consigliabile usare un algoritmo più avanzato, se possibile. Per altre indicazioni, rivolgersi al consulente per la sicurezza. HMAC.Create() HMACSHA1() L'uso dell'algoritmo HMACSHA1 è sconsigliato per la maggior parte delle applicazioni moderne. È consigliabile usare un algoritmo più avanzato, se possibile. Per altre indicazioni, rivolgersi al consulente per la sicurezza. KeyedHashAlgorithm.Create() HMACSHA1() L'uso dell'algoritmo HMACSHA1 è sconsigliato per la maggior parte delle applicazioni moderne. È consigliabile usare un algoritmo più avanzato, se possibile. Per altre indicazioni, rivolgersi al consulente per la sicurezza. SymmetricAlgorithm.Create() Aes.Create()
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 SYSLIB0007
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0007
Per eliminare tutti gli avvisi SYSLIB0007
nel progetto, aggiungere una proprietà <NoWarn>
al file di progetto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0007</NoWarn>
</PropertyGroup>
</Project>
Per altre informazioni, vedere Non visualizzare gli avvisi.