微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android-AES姜饼

This是我的AES代码.

在Gingerbread下,在2.2上加密数据然后在2.3上尝试解密后,出现以下错误

 Caused by: javax.crypto.BadPaddingException: pad block corrupted
        at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(JCEBlockCipher.java:715)
        at javax.crypto.Cipher.doFinal(Cipher.java:1090)
        at com.citc.wallet.util.security.SimpleCrypto.decrypt(SimpleCrypto.java:63)
        ... 21 more

我发现一些帖子说SecureRandom在不同的系统下产生不同的结果:

BouncyCastle AES error when upgrading to 1.45

如何避免2.3出现此问题?
我可以以某种方式强制2.3使用相同的SecureRandom类吗?
我需要使用某种便携式加密方法吗?

解决方法:

答案是您根本不应该做自己正在做的事情.罪魁祸首:

sr.setSeed(seed);
kgen.init(128, sr); // 192 and 256 bits may not be available
SecretKey skey = kgen.generateKey();

永远不要为密钥填充一些不可预测的随机值,因为稍后您将需要重新创建相同的精确密钥.这是来自android docs的一些关键内容

seeding SecureRandom may be insecure”

Although it is common practice to seed
Random with the current time, that is
dangerous with SecureRandom since that
value is predictable to an attacker
and not appropriate for secure use.

无论如何,我知道您的论点将是您只是“填充”密钥,而执行操作的安全性并不重要.

如果您要接受192位或256位实现的128位密钥,则必须实现一种可重复的方法,将密钥扩展为192位或256位.如果愿意,您甚至可以将全0加到该键上,但是该键实际上是必须以某种方式完成该操作,以便您可以在每个系统上重复该操作.

无论如何,您可能还想考虑您正在做的事情可能会在Android以外的系统上使用.在这种情况下,应该选择使用更“便携式”的方法来扩展密钥.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐