Указанный ключ не является допустимым для этого алгоритма
У меня с этим кодом:
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.
Что случилось с этими строками? Могу ли я рассчитывать на некоторые примеры строк из вас?
Ответы
Ответ 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);
Так просто.