Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Property | Värde |
---|---|
Regel-ID | CA5401 |
Title | Använd inte CreateEncryptor med icke-standard-IV |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Använda System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor med icke-standard rgbIV
.
Regelbeskrivning
Symmetrisk kryptering bör alltid använda en icke-repeterbar initieringsvektor för att förhindra ordlisteattacker.
Den här regeln liknar CA5402, men analysen bestämmer att initieringsvektorn definitivt är standard.
Så här åtgärdar du överträdelser
Använd standardvärdet rgbIV
, 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 är
rgbIV
verkligen slumpmässig och icke-repeterbar.
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 CA5401
// The code that's violating the rule is on this line.
#pragma warning restore CA5401
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.CA5401.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] rgbIV)
{
AesCng aesCng = new AesCng();
aesCng.IV = rgbIV;
aesCng.CreateEncryptor();
}
}
Lösning
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}