2013-06-26 2 views
0

Я пытаюсь расшифровать некоторые тексты и получить эту ошибку. Я много сделал google и читал статьи. Есть много людей с одинаковой ошибкой, но я не могу решить мою проблему.Указанный вектор инициализации (IV) не соответствует размеру блока для этого алгоритма

Ниже приведен пример кода, и вы можете видеть IV, который я использую.

IV изготовлен AS3crypto. вы можете увидеть демо в this page. вы можете увидеть на вкладке Secret Key. Моя настройка - AES, CBC.

Т.е. я не могу изменить IV, и я считаю, что IV является допустимым.

Я думаю, что проблема заключается в том, как я устанавливаю IV в .Net, что неправильно.

Любые мысли ребята?

Заранее спасибо.

Using aesAlg As New AesCryptoServiceProvider 

     Dim IV_COMPONENT As Byte() = Convert.FromBase64String("a462114bca101105db976158381a4d05") 
     //Dim IV_COMPONENT As Byte() = Encoding.ASCII.GetBytes("a462114bca101105db976158381a4d05") 

     aesAlg.IV = IV_COMPONENT 

     aesAlg.Mode = CipherMode.CBC 

     ' Create a decrytor to perform the stream transform. 
     Dim decryptor As ICryptoTransform = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV) 

      Using msDecrypt As New MemoryStream(cipherText) 

      Using csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read) 

       Using srDecrypt As New StreamReader(csDecrypt) 

        plaintext = srDecrypt.ReadToEnd() 
       End Using 
      End Using 
     End Using 
    End Using 

ответ

0

Попробуйте ввести другую строчную кодировку. Хотя я использовал строку base64, такую ​​же, как вы в моем классе, у меня был контроль над поколением IV и кодированием. Возможно, везде, где вы получили строчную кодированную форму массива IV байтов из используемого UTF8 или некоторых таких.

Я думаю, что я где-то читал, что есть только определенные длины массива байтов, которые используются как IV. Один из способов проверки заключается в том, чтобы получить массив байтов из этой строки в разных кодировках и использовать массив байтов, который наиболее похож на мощность 2 (128, 256 ... или 192, так как это также общее магическое число).