【发布时间】:2009-04-06 20:41:15
【问题描述】:
我的问题实际上比如何在 VB.NET 中使用 AES 要复杂一些,因为我真正想做的是在 JACOB 的 Java 应用程序中在 VB.NET 中使用 AES。但现在,我需要关注的是 AES 实现本身。
这是我的加密代码
Public Function EncryptAES(ByVal toEncrypt As String, ByVal key As String) As Byte()
Dim keyArray = Convert.FromBase64String(key)
Dim toEncryptArray = Encoding.Unicode.GetBytes(toEncrypt)
Dim aes = New AesCryptoServiceProvider
aes.Key = keyArray
aes.Mode = CipherMode.ECB
aes.Padding = PaddingMode.ISO10126
Dim encryptor = aes.CreateEncryptor()
Dim encrypted = encryptor.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length)
aes.Clear()
Return encrypted
End Function
回到 Java 代码中,我将字节数组转换为十六进制字符串。
现在,为了扭转这个过程,这是我的解密代码
Public Function DecryptAES(ByVal toDecrypt As String, ByVal key As String) As Byte()
Dim keyArray = Convert.FromBase64String(key)
Dim toDecryptArray = Convert.FromBase64String(toDecrypt)
Dim aes = New AesCryptoServiceProvider
aes.Key = keyArray
aes.Mode = CipherMode.ECB
aes.Padding = PaddingMode.ISO10126
Dim decryptor = aes.CreateDecryptor()
Dim decrypted = decryptor.TransformFinalBlock(toDecryptArray, 0, toDecryptArray.Length)
aes.Clear()
Return decrypted
End Function
当我运行解密代码时,我收到以下错误消息
填充无效,无法移除。
【问题讨论】:
-
您是否尝试过将加密数据保存在某处,然后将保存的数据逐字节与通过 java 传递后对您的解密函数的调用进行比较?
-
还有:什么版本的 vb.net/visual studio?
-
Visual Studio 2008 Pro 我无法进行您建议的测试,因为我还没有达到从解密到测试的返回值的地步。该错误是由我的 VB 解密函数引发的。
-
你能否在不发送到 Java 的情况下往返传输一段数据? IE。 DecryptAES(EncryptAES("text", "key"), "key")
-
请注意,ECB 很少是一个好的模式。因此,如果您想在 VB.net 中加密某些内容,请不要复制粘贴此代码。
标签: java vb.net aes encryption