c# encryption rijndaelmanaged rijndael

c# - El vector de inicialización especificado(IV) no coincide con el tamaño del bloque para este algoritmo



encryption rijndaelmanaged (2)

Debería poder verificar cuántos bytes debe usar el IV:

algorithm.BlockSize / 8

BlockSize está en bits, por lo que 128 bits / 8 da 16 bytes de ASCII, y también puede encontrar Rfc2898DeriveBytes una clase útil para producir claves.

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

Espero eso ayude.

Estoy trabajando en un método de cifrado básico. Estoy usando RijndaelManaged. Recibí este código desde algún lugar hace mucho tiempo, pero no puedo recordar dónde.

Antes tenía mi código funcionando, pero algo cambió y no puedo entenderlo.

Cuando ejecuto mi código, aparece el siguiente error;

El vector de inicialización especificado (IV) no coincide con el tamaño del bloque para este algoritmo.

Aquí está mi código:

string textToEncrypt = "TEST STRING"; int keySize = 256; string hashAlgorithm = "SHA1"; string passPhrase = "AH!PSB0%FGHR$"; string saltValue = "LRT%YUR#VBNL@1"; string initVector = "HR$2pIjHR$2pIj"; 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);

Cualquier ayuda será apreciada.


El problema es que el tamaño del vector de inicialización debe ser de 16 bytes.

El tamaño inicial del vector es 14 bytes.

Tendrá que aumentar el tamaño de su vector inicial en 2 bytes y su código funcionará.

Ejemplo:

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

A continuación, obtendrá la salida con su código actual y el tamaño de ejemplo IV (vector de inicialización) proporcionado:

hAC8hMf3N5Zb / DZhFKi6Sg ==

Este artículo proporciona una buena explicación sobre lo que es el vector de inicialización.

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