解密期间的Android AES加密错误

时间:2012-05-18 08:18:25

标签: android encryption aes

我对Android / Java中的AES加密一无所知

我从这里获得了此代码http://www.androidsnippets.com/encryptdecrypt-strings

我在解密时遇到以下错误我的代码是否有问题?(我将加密值从一个活动传递到另一个活动)

 05-18 13:49:58.828: W/System.err(3350): javax.crypto.BadPaddingException: pad block   corrupted
 05-18 13:49:59.133: W/System.err(3350):    at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(JCEBlockCipher.java:653)
 05-18 13:49:59.148: W/System.err(3350):    at javax.crypto.Cipher.doFinal(Cipher.java:1116)
 05-18 13:49:59.153: W/System.err(3350):    at com.spacenext.noserver2.SimpleCrypto.decrypt(SimpleCrypto.java:55)
 05-18 13:49:59.158: W/System.err(3350):    at com.spacenext.noserver2.SimpleCrypto.decrypt(SimpleCrypto.java:28)

加密

 05-18 15:07:32.283: I/Home(3341): 530AEA4983C93379EB512387B4E547522C1E310AD6E7752AF5B9F91C329D313315FDDA853E60C78EA618211A37BA8A47

在另一项活动中收到的加密邮件

 05-18 15:07:55.382: I/Home(7871): 530AEA4983C93379EB512387B4E547522C1E310AD6E7752AF5B9F91C329D313315FDDA853E60C78EA618211A37BA8A47

两者都相同,但是当在另一个活动中解密消息时,它会抛出错误消息..

1 个答案:

答案 0 :(得分:1)

此代码使用弱密钥派生程序,考虑使用基于标准密码的加密来派生密钥。

您的错误原因很可能是您使用了错误的密钥进行解密。以十六进制格式打印出来,并与加密密钥(getRawKey()的输出)进行比较。如果您以某种方式自定义代码,请显示相关部分。你是如何传递加密值的?是以某种方式编码?还要检查解密活动中的大小是否符合预期。

由于加密和解密是在不同的设备上完成的,因此涉及服务器。这里还有一些要检查/记住的事情:

  1. 确保您从设备A发送的密文是设备B上收到的密文。可能涉及编码问题。
  2. 不要使用模式和填充的默认参数。您的设备可能会有所不同。明确指定它们,如Cipher.getInstance("AES/CBC/PKCS5Padding")
  3. 确保将密码与密文一起发送。否则,可能会自动生成随机的,您将无法解密。