Шифрование AES 256 Проблема длины входного открытого текста

Моя команда безопасности хочет, чтобы я использовал силу ключа AES256 и режим CBC. Мой код работает только тогда, когда я ввожу входной открытый текст длиной 32 буквы после изменения на 256 CBC и размера блока на 128.

Если я ввожу «Это тест» (длиной не 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;
}

person moto_geek    schedule 20.03.2015    source источник


Ответы (1)


AES — это блочный шифр, поэтому он работает только с открытыми текстами, размер которых равен одному блоку. Такой режим работы, как CBC, позволяет шифровать открытые тексты, кратные размеру блока. Для шифрования открытых текстов произвольной длины необходимо использовать режим заполнения.

Общий режим, используемый для блочных шифров, — PKCS#5/PKCS#7:

aes.Padding = PaddingMode.PKCS7;
person Artjom B.    schedule 20.03.2015