Encryption algorithms should use secure modes and padding schemes where appropriate to guarantee data confidentiality and integrity.

Noncompliant Code Example

AesManaged object with insecure mode:

Dim aes4 = New AesManaged With {
    .KeySize = 128,
    .BlockSize = 128,
    .Mode = CipherMode.ECB, ' Noncompliant
    .Padding = PaddingMode.PKCS7
}

RSACryptoServiceProvider object without OAEP padding:

Dim RSA1 = New RSACryptoServiceProvider()
Dim encryptedData = RSA1.Encrypt(dataToEncrypt, False) ' Noncompliant: OAEP Padding is not used (second parameter set to false)

Compliant Solution

AES with GCM mode with bouncycastle library:

Dim blockCipher As GcmBlockCipher = New GcmBlockCipher(New AesFastEngine()) ' Compliant
blockCipher.Init(True, New AeadParameters(New KeyParameter(secretKey), 128, iv, Nothing))

AES with GCM mode with AesGcm object:

Dim aesGcm = New AesGcm(key) ' Compliant

RSA with OAEP padding with RSACryptoServiceProvider object:

Dim RSA2 = New RSACryptoServiceProvider()
Dim encryptedData = RSA2.Encrypt(dataToEncrypt, True) ' Compliant: OAEP Padding is used (second parameter set to true)

See