Подтвердить что ты не робот

Указанный ключ не является допустимым для этого алгоритма

У меня с этим кодом:

RijndaelManaged rijndaelCipher = new RijndaelManaged();

            // Set key and IV
            rijndaelCipher.Key = Convert.FromBase64String("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678912");
            rijndaelCipher.IV = Convert.FromBase64String("1234567890123456789012345678901234567890123456789012345678901234");

Я получаю броски:

Specified key is not a valid size for this algorithm.

Specified initialization vector (IV) does not match the block size for this algorithm.

Что случилось с этими строками? Могу ли я рассчитывать на некоторые примеры строк из вас?

4b9b3361

Ответ 1

Строка "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678912", когда base64-decoded дает 48 байтов (384 бит). RijndaelManaged поддерживает 128, 192 и 256-битные ключи.

Действительный 128-битный ключ new byte[]{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, или если вам нужно получить его из base64: Convert.FromBase64String("AAECAwQFBgcICQoLDA0ODw==").

Блокировка по умолчанию - 128 бит, поэтому один и тот же байт-массив будет работать как IV.

Ответ 2

Используйте класс генератора случайных чисел (RNGCryptoServiceProvider) для заполнения указанного буфера случайными байтами следующим образом:

var numberOfBits = 256; // or 192 or 128, however using a larger bit size renders the encrypted data harder to decipher

var ivBytes = new byte[numberOfBits / 8]; // 8 bits per byte

new RNGCryptoServiceProvider().GetBytes(ivBytes);

var rijndaelManagedCipher = new RijndaelManaged();

//Don't forget to set the explicitly set the block size for the IV if you're not using the default of 128

rijndaelManagedCipher.BlockSize = 256;

rijndaelManagedCipher.IV = ivBytes;

Обратите внимание, что для получения ключа можно использовать тот же процесс. Надеюсь, это поможет.

Ответ 3

Алгоритм RijndaelManaged поддерживает длину ключа 128, 192 или 256 бит. Является ли ваш ключ одним из этих размеров?

Ответ 4

Я не знаю длины rijndaelCipher.Key если это 24, тогда rijndaelCipher.Key = s.SubString(0, 24);

Так просто.