Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA5401 |
| Judul | Jangan gunakan CreateEncryptor dengan IV non-default |
| Kategori | Keamanan |
| Perbaikan bersifat merusak atau tidak merusak | Tidak terputus |
| Diaktifkan secara default di .NET 10 | Tidak |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Menggunakan System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor dengan rgbIV yang bukan bawaan.
Deskripsi aturan
Enkripsi simetris harus selalu menggunakan vektor inisialisasi yang tidak dapat diulang untuk mencegah serangan kamus.
Aturan ini mirip dengan CA5402, tetapi analisis menentukan bahwa vektor inisialisasi jelas merupakan default.
Cara memperbaiki pelanggaran
Gunakan nilai default rgbIV , yaitu, gunakan kelebihan beban System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor yang tidak memiliki parameter apa pun.
Kapan harus menekan peringatan
Aman untuk menyembunyikan peringatan dari aturan ini jika:
- Parameter
rgbIVdihasilkan oleh System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - Anda yakin bahwa
rgbIVitu benar-benar acak dan tidak dapat diulang.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA5401
// The code that's violating the rule is on this line.
#pragma warning restore CA5401
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA5401.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh kode semu
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] rgbIV)
{
AesCng aesCng = new AesCng();
aesCng.IV = rgbIV;
aesCng.CreateEncryptor();
}
}
Solusi
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}