Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA5379 |
| Başlık | Anahtar türetme işlevi algoritmasının yeterince güçlü olduğundan emin olun |
| Kategori | Güvenlik |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
System.Security.Cryptography.Rfc2898DeriveBytes örneği oluştururken aşağıdaki algoritmalardan birinin kullanılması:
- System.Security.Cryptography.MD5
- System.Security.Cryptography.SHA1
- Derleme zamanında kuralın belirleyemediği bir algoritma
Kural açıklaması
Rfc2898DeriveBytes sınıfı varsayılan olarak algoritmayı SHA1 kullanır. Bir Rfc2898DeriveBytes nesnesinin örneğini oluştururken SHA256 veya daha yüksek bir karma algoritması belirtmeniz gerekir. Özelliğin yalnızca bir Rfc2898DeriveBytes.HashAlgorithm erişimciye sahip olduğunu get unutmayın.
İhlalleri düzeltme
MD5 veya SHA1 çakışmalara karşı savunmasız olduğundan, Rfc2898DeriveBytes sınıfı için SHA256 veya daha yüksek bir sürümünü kullanın.
.NET Framework veya .NET Core'un eski sürümleri, anahtar türetme işlevi karma algoritması belirtmenize izin vermeyebilir. Bu gibi durumlarda, daha güçlü bir algoritma kullanmak için .NET'in hedef çerçeve sürümünü yükseltmeniz gerekir.
Uyarıların ne zaman bastırılması gerekiyor?
Uygulama uyumluluğu nedenleri dışında bu kuralın gizlenmesi önerilmez.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA5379
// The code that's violating the rule is on this line.
#pragma warning restore CA5379
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA5379.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Sahte kod örnekleri
Oluşturucu ihlalinde karma algoritmayı belirtme
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, salt, iterations, HashAlgorithmName.MD5);
}
}
Türetilmiş sınıfın oluşturucu ihlalinde karma algoritma belirtme
using System.Security.Cryptography;
class DerivedClass : Rfc2898DeriveBytes
{
public DerivedClass (byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm) : base(password, salt, iterations, hashAlgorithm)
{
}
}
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var derivedClass = new DerivedClass(password, salt, iterations, HashAlgorithmName.MD5);
}
}
Türetilmiş sınıflarda karma algoritma özelliğini ayarlama ihlali
using System.Security.Cryptography;
class DerivedClass : Rfc2898DeriveBytes
{
public DerivedClass (byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm) : base(password, salt, iterations, hashAlgorithm)
{
}
public HashAlgorithmName HashAlgorithm { get; set;}
}
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var derivedClass = new DerivedClass(password, salt, iterations, HashAlgorithmName.MD5);
derivedClass.HashAlgorithm = HashAlgorithmName.SHA256;
}
}
Çözüm
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, salt, iterations, HashAlgorithmName.SHA256);
}
}