CA5401: Gebruik CreateEncryptor niet met niet-standaard IV
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA5401 |
Titel | CreateEncryptor niet gebruiken met niet-standaard IV |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Gebruiken System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor met niet-standaardwaarde rgbIV
.
Beschrijving van regel
Symmetrische versleuteling moet altijd een niet-herhaalbare initialisatievector gebruiken om woordenlijstaanvallen te voorkomen.
Deze regel is vergelijkbaar met CA5402, maar bij analyse wordt bepaald dat de initialisatievector absoluut de standaardwaarde is.
Schendingen oplossen
Gebruik de standaardwaarde rgbIV
, dat wil gezegd, de overbelasting van de System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor waarde die geen parameter heeft.
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken als:
- De
rgbIV
parameter is gegenereerd door System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - U weet zeker dat het
rgbIV
echt willekeurig en niet herhaalbaar is.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA5401
// The code that's violating the rule is on this line.
#pragma warning restore CA5401
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA5401.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Voorbeelden van pseudocode
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] rgbIV)
{
AesCng aesCng = new AesCng();
aesCng.IV = rgbIV;
aesCng.CreateEncryptor();
}
}
Oplossing
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}