【问题标题】:Android AES Encryption error during decrypting解密期间的Android AES加密错误
【发布时间】:2012-05-18 21:43:24
【问题描述】:

我对 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

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

【问题讨论】:

  • 看看这里:stackoverflow.com/questions/868776/… 并检查 iv 参数
  • 那段代码实在是太糟糕了,并且包含了各种可能随时反噬你的陷阱。使用您提供的信息无法判断是导致您的问题的那些陷阱之一还是您正在做的事情。
  • GregS 当消息从同一部手机发送到另一部手机时,该代码工作得非常好,但从一部手机发送到另一部手机时,它就不起作用了

标签: android encryption aes


【解决方案1】:

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

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

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

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

【讨论】:

  • 我在没有被编码的​​情况下传递了加密值,并且在日志中它也是一样的,我使用相同的密钥进行解密并且我没有修改上述任何代码。对一项活动进行加密 对另一项活动进行解密
  • 那么问题可能确实出在初始化向量 (IV) 上,它可能是随机生成的。在加密Cipher 上调用getIV() 或明确指定一个。你可以在这里找到一些示例代码:nelenkov.blogspot.jp/2012/04/…
  • 仍然存在问题,因为我将这些文本从手机发送到服务器以及从服务器发送到手机?那么这是否是问题的根源呢?
  • 安卓手机版本不同,一个是2.2,另一个是2.3?
  • 不是根本问题,但可能是一个因素。查看更新的答案。
猜你喜欢
  • 2016-09-22
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 2021-08-04
  • 1970-01-01
相关资源
最近更新 更多