使用AES-256和Decrypt in Air进行VB.NET加密

时间:2011-07-28 19:18:14

标签: vb.net encryption air aes

我正在尝试加密VB.NET中的zip以使用Air发送到Android设备。然后,一旦它在设备上,使用密钥和IV解密它。

这是我的VB.NET代码的一部分:

     Private Sub EncryptBytes(ByVal fileIn As String, ByVal fileOut As String, ByVal pass As String, ByVal ivString As String)

        Dim crypt As New RijndaelManaged
        crypt.KeySize = 256
        crypt.BlockSize = 256
        crypt.Padding = PaddingMode.PKCS7
        crypt.Mode = CipherMode.CFB

        'read byte array from file location, ie c:\temp\file.zip
        Dim data As Byte() = ReadByteArray(fileIn)

        Dim iv As Byte() = System.Text.Encoding.UTF8.GetBytes(ivString)
        Dim key As Byte() = System.Text.Encoding.UTF8.GetBytes(pass)
        Dim encryptor As ICryptoTransform = crypt.CreateEncryptor(key, iv)

        Using ms As New System.IO.MemoryStream

            Using cs As New CryptoStream(ms, encryptor, CryptoStreamMode.Write)

                cs.Write(data, 0, data.Length)
                cs.FlushFinalBlock()

            End Using

            'write byte array to file location, ie c:\temp\file_e.zip
            WriteByteArray(fileOut, ms.ToArray)

        End Using

    End Sub

两件事,首先我不想使用PaddingMode.PKCS7但是当我将其更改为PaddingMode.None时,我在解密过程中收到一条错误,上面写着“要加密的数据长度无效”。

其次,我有一个解密SUB,如果我发送一个假的IV,它仍然有效。为什么IV不会影响解密过程。

DECRYPTION

In Air我正在使用我在http://crypto.hurlant.com/docs/找到的com.hurlant.crypto包。

这是我的功能:

public static function decryptZip(src:ByteArray, k:String, iv:String):ByteArray {

    var key:ByteArray = Hex.toArray(Hex.fromString(k)); 

    var mode:CFBMode = new CFBMode(new AESKey(key), new PKCS7(256));
    mode.IV = Hex.toArray(Hex.fromString(iv));

    mode.decrypt(src);

    return src;

}

这不起作用...请注意,我尝试根据我找到的Java类编写PKCS7类。我下载的推特包只有PKCS5。 VB.NET没有像hurlant一样提供任何相同的填充类。我希望我可以使用“无”,但我无法在VB中传递错误。

我认为在VB vs Air中将字符串转换为字节数组的方式可能存在问题。

请帮忙!

1 个答案:

答案 0 :(得分:0)

查看此示例代码我不确定它是否是您正在寻找的解决方案, http://www.obviex.com/samples/Encryption.aspx