CA5401: Non usare CreateEncryptor con iv non predefinito
Proprietà | valore |
---|---|
ID regola | CA5401 |
Title | Non usare CreateEncryptor con il vettore di inizializzazione non predefinito |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Uso di System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor con un oggetto non predefinito rgbIV
.
Descrizione regola
La crittografia simmetrica deve usare sempre un vettore di inizializzazione non ripetibile per impedire attacchi a dizionario.
Questa regola è simile a CA5402, ma l'analisi determina che il vettore di inizializzazione è sicuramente l'impostazione predefinita.
Come correggere le violazioni
Usare il valore predefinito rgbIV
, ovvero usare l'overload dell'oggetto System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor che non ha alcun parametro.
Quando eliminare gli avvisi
È possibile eliminare un avviso da questa regola se:
- Il
rgbIV
parametro è stato generato da System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - Sei sicuro che il
rgbIV
è davvero casuale e non ripetibile.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA5401
// The code that's violating the rule is on this line.
#pragma warning restore CA5401
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA5401.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] rgbIV)
{
AesCng aesCng = new AesCng();
aesCng.IV = rgbIV;
aesCng.CreateEncryptor();
}
}
Soluzione
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}