我正在尝试加密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不会影响解密过程。
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中将字符串转换为字节数组的方式可能存在问题。
请帮忙!