首页
学习
活动
专区
圈层
工具
发布

AES姜饼
EN

Stack Overflow用户
提问于 2010-12-27 09:58:50
回答 1查看 1.6K关注 0票数 3

This是我的AES代码。

在姜饼下,在2.2上加密数据,然后在2.3上尝试解密后,我得到了以下错误:

代码语言:javascript
复制
 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类吗?

我需要使用一些可移植的加密方法吗?如果需要,那该怎么办?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-04 05:40:19

答案是,你根本不应该做你正在做的事情。这就是罪魁祸首:

代码语言:javascript
复制
sr.setSeed(seed);
kgen.init(128, sr); // 192 and 256 bits may not be available
SecretKey skey = kgen.generateKey();

你永远不应该用一些不可预测的随机值来填充你的密钥,因为你以后需要重新创建同样的密钥。以下是android文档中的一些关键行

“设定种子SecureRandom可能不安全”

尽管使用当前时间作为随机种子是一种常见的做法,但这对于SecureRandom来说是很危险的,因为该值对于攻击者来说是可预测的,并且不适合安全使用。

无论如何,我知道你的论点是,你只是在“填充”密钥,你所做的事情的安全性并不是什么大问题。

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

在任何情况下,您可能还希望考虑您正在做的事情可能在Android以外的系统上使用。在这些情况下,应该选择使用更“便携”的方法来展开键。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4536241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档