Il vettore di inizializzazione specificato (IV) non corrisponde alla dimensione del blocco per questo algoritmo

Il vettore di inizializzazione specificato (IV) non corrisponde alla dimensione del blocco per questo algoritmo

Il problema è che la dimensione del tuo vettore di inizializzazione deve essere 16 byte.

La dimensione iniziale del tuo vettore è 14 byte.

Dovrai aumentare la dimensione del tuo vettore iniziale di 2 byte e il tuo codice funzionerà.

Esempio:

string initVector = "HR$2pIjHR$2pIj12";

Otterrai quindi l'output con il tuo codice corrente e la dimensione IV di esempio (vettore di inizializzazione) fornita:

hAC8hMf3N5Zb/DZhFKi6Sg==

Questo articolo fornisce una buona spiegazione su quale sia il vettore di inizializzazione.

http://en.wikipedia.org/wiki/Initialization_vector


Dovresti essere in grado di controllare quanti byte deve utilizzare l'IV:

algorithm.BlockSize / 8

BlockSize è in bit, quindi 128 bit / 8 fornisce 16 byte di ASCII e potresti anche trovare Rfc2898DeriveBytes una classe utile per produrre chiavi.

algorithm.IV = rfc2898DeriveBytesForIV.GetBytes(algorithm.BlockSize / 8);

Spero che aiuti.


Se qualcuno sta migrando il proprio codice da .NET Framework a .NET Core e inizia a ricevere questa eccezione su RijndaelManaged.CreateEncryptor :il tuo vecchio raffreddore funzionava a causa del fatto che ".NET Framework consente IV maggiori di 64 bit e li tronca".

Per risolvere, vedere il commento di Kevin Jones:"cambia semplicemente il tuo IV solo ai primi 8 byte"

Quindi, ad esempio:

private static byte[] IV_192 =  { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18 };

diventerebbe:

// Rename field if desired.
private static byte[] IV_192 =  { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };

Vale anche la pena notare:"La classe Rijndael è il predecessore dell'algoritmo Aes. Dovresti usare l'algoritmo Aes invece di Rijndael."