Le vecteur d'initialisation spécifié (IV) ne correspond pas à la taille du bloc pour cet algorithme

je travaille sur une méthode de cryptage de base. J'utilise RijndaelManaged. J'ai eu ce code il y a longtemps, mais je ne me souviens pas où.

mon code fonctionnait avant, mais quelque chose a changé et je ne peux pas tout à fait le comprendre.

Quand je lance mon code, j'obtiens l'erreur suivante;

vecteur D'initialisation spécifié (IV) ne correspond pas à la taille de bloc pour cette algorithme.

Voici mon code:

string textToEncrypt = "TEST STRING";

            int keySize = 256;
            string hashAlgorithm = "SHA1";
            string passPhrase = "AH!PSB0%FGHR$";
            string saltValue = "LRT%YUR#VBNL@1";
            string initVector = "HRpIjHRpIj";



            byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
            byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);

            byte[] plainTextBytes = Encoding.UTF8.GetBytes(textToEncrypt);

            PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, 2);

            byte[] keyBytes = password.GetBytes(keySize / 8);

            RijndaelManaged symmetricKey = new RijndaelManaged();

            symmetricKey.Mode = CipherMode.CBC;

            ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes,initVectorBytes);

            MemoryStream memoryStream = new MemoryStream();

            CryptoStream cryptoStream = new CryptoStream(memoryStream,encryptor,CryptoStreamMode.Write);
            cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);

            cryptoStream.FlushFinalBlock();

            byte[] cipherTextBytes = memoryStream.ToArray();

            memoryStream.Close();
            cryptoStream.Close();

            string cipherText = Convert.ToBase64String(cipherTextBytes);

Toute aide sera appréciée.

23
demandé sur SwDevMan81 2009-06-03 17:44:14

2 réponses

le problème est que la taille du vecteur d'initialisation doit être de 16 octets.

votre taille initiale de vecteur est de 14 octets.

vous devrez augmenter la taille de votre vecteur initial de 2 octets et votre code fonctionnera.

Exemple:

string initVector = "HRpIjHRpIj12";

Vous obtiendrez alors la sortie avec votre code actuel et la taille de l'exemple IV (vecteur d'initialisation) fournie:

hAC8hMf3N5Zb/DZhFKi6Sg==

cet article fournit un bon explication sur ce qu'est le vecteur d'initialisation.

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

52
répondu CodeLikeBeaker 2009-06-03 13:45:56

vous devriez être en mesure de vérifier combien d'octets Le IV doit utiliser:

algorithm.BlockSize / 8

taille de bloc est en bits, 128 bits / 8 donne 16 octets ASCII, et vous pouvez également trouver Rfc2898DeriveBytes une classe utile pour produire des clés.

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

j'Espère que ça aide.

11
répondu Luke Puplett 2015-05-06 18:10:39