Condividi tramite


CA5402: Usare CreateEncryptor con l'iv predefinito

Proprietà valore
ID regola CA5402
Titolo Usa CreateEncryptor con il vettore di inizializzazione predefinito
Categoria Sicurezza
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 No

Causa

Può rgbIV essere non predefinito quando si usa System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor.

Descrizione regola

La crittografia simmetrica deve usare sempre un vettore di inizializzazione non ripetibile per impedire attacchi a dizionario.

Questa regola è simile a CA5401, ma l'analisi non è in grado di determinare che il vettore di inizializzazione è sicuramente l'impostazione predefinita.

Come correggere le violazioni

Usare il valore predefinito in modo esplicito 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:

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 CA5402
// The code that's violating the rule is on this line.
#pragma warning restore CA5402

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.CA5402.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Esempi di pseudo-codice

using System;
using System.Security.Cryptography;

class ExampleClass
{
    public void ExampleMethod(byte[] rgbIV)
    {
        AesCng aesCng  = new AesCng();
        Random r = new Random();

        if (r.Next(6) == 4)
        {
            aesCng.IV = rgbIV;
        }

        aesCng.CreateEncryptor();
    }
}

Soluzione

using System.Security.Cryptography;

class ExampleClass
{
    public void ExampleMethod()
    {
        AesCng aesCng  = new AesCng();
        aesCng.CreateEncryptor();
    }
}