1

セキュリティ チームから、AES256 キー強度と CBC モードを使用するように求められています。私のコードは、256 CBC とブロック サイズを 128 に変更した後、長さ 32 文字の入力平文を入力した場合にのみ機能します。

「これはテストです」(32 文字ではありません) と入力すると、次のメッセージが表示されます。

System.Security.Cryptography.CryptographicException: 入力データが完全なブロックではありません。

「ABCDEFGHIJKLMNOPQRSTUVWXYZ000000」と入力すると、うまくいきます!

「これはテストです」を入力としてこれを機能させるには、どのコードが必要ですか。

以下のコード:

public byte[] EncryptStringToByte(string plainText, byte[] key, byte[]  vector)
{               
byte[] encrypted;                
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
    aes.BlockSize = 128;
    aes.KeySize = 256;
    aes.Mode = CipherMode.CBC;
    aes.Padding = PaddingMode.None;
    aes.Key = key;
    aes.IV = vector;

    // Create a decrytor to perform the stream transform.
    ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

    // Create the streams used for encryption. 
    using (MemoryStream msEncrypt = new MemoryStream())
    {
        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
        {
            using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
            {

                //Write all data to the stream.
                swEncrypt.Write(plainText);
            }
            encrypted = msEncrypt.ToArray();
        }
    }
    }
// Return the encrypted bytes from the memory stream. 
return encrypted;
}
4

1 に答える 1