指定的初始化向量(IV)与此算法的块大小不匹配

时间:2013-06-26 15:20:29

标签: asp.net vb.net as3crypto aescryptoserviceprovider

我正在尝试解密一些文本并收到此错误。我做了很多谷歌并阅读文章。有很多人有同样的错误,但我无法解决我的问题。

下面是一些代码示例,您可以看到我正在使用的IV。

IV由AS3crypto制作。你可以在this page.看到演示 你可以在Secret Key选项卡上看到。我的设置是AES,CBC。

即。我不能改变IV,我认为IV是有效的。

我认为问题是我在.Net中设置IV的方式是不对的。

有什么想法吗?

提前致谢。

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

1 个答案:

答案 0 :(得分:0)

尝试不同的字符串编码。虽然我在课堂上使用了与你相同的base64字符串,但我控制了IV生成和编码。也许你从使用过的UTF8或其它类似的地方获得了IV字节数组的字符串编码形式。

我想我在某处读到只有某些字节数组长度用作IV。检查的一种方法是从各种编码中获取该字符串的字节数组,并使用最接近2的幂的字节数组(128,256 ......或192,因为这也是一个常见的幻数)。