Из моей команды безопасности они хотят, чтобы я использовал силу ключа AES256 и режим CBC. Мой код работает только тогда, когда я ввожу вводный текст из 32 букв в длину теперь после смены на 256 CBC и размером блока до 128.Шифрование AES 256 Input Plaintext Length Issue
Если я введу «Это тест» (длиной не 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;
}