CA5402: Använd CreateEncryptor med standard-IV
Property | Värde |
---|---|
Regel-ID | CA5402 |
Title | Använd CreateEncryptor med standard-IV |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
rgbIV
Kan vara icke-standard när du använder System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor.
Regelbeskrivning
Symmetrisk kryptering bör alltid använda en icke-repeterbar initieringsvektor för att förhindra ordlisteattacker.
Den här regeln liknar CA5401, men analysen kan inte avgöra att initieringsvektorn definitivt är standard.
Så här åtgärdar du överträdelser
Använd standardvärdet rgbIV
explicit, d.v.s. använd överlagringen av som System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor inte har någon parameter.
När du ska ignorera varningar
Det är säkert att ignorera en varning från den här regeln om:
- Parametern
rgbIV
genererades av System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - Du är säker på att parametern
rgbIV
verkligen är slumpmässig och inte repeterbar. - Du är säker på att initieringsvektorn används.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA5402
// The code that's violating the rule is on this line.
#pragma warning restore CA5402
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA5402.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
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();
}
}
Lösning
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}