This是我的AES代码。
在姜饼下,在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类吗?
我需要使用一些可移植的加密方法吗?如果需要,那该怎么办?
发布于 2011-02-04 05:40:19
答案是,你根本不应该做你正在做的事情。这就是罪魁祸首:
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以外的系统上使用。在这些情况下,应该选择使用更“便携”的方法来展开键。
https://stackoverflow.com/questions/4536241
复制相似问题