做文件加解密,在PC上调试没有任何问题,PC(服务端)加密,密件下载到手机上解密,结果就是解不开。
最后发现是SecureRandom的坑。PC与android的结果不一样!特此记录
android报错如下:
W/System.err: javax.crypto.BadPaddingException: pad block corrupted
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$BufferedGenericBlockCipher.doFinal(Unknown Source:14)
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source:24)
at javax.crypto.Cipher.doFinal(Cipher.java:2055)
修改了网传的出口加密限制(jre的security下的文件配置)、更改jre版本都不行,折腾了两天,不说了,让我去吐一会-_-!!!
以下为SecureRandom相关的安全咨询,建议还是不要用这个吧。用别的很容易替代。
2013年比特币开发商在一篇博客中透露,由于Android系统存在一处关键漏洞,该平台上的比特币电子钱包很容易失窃。比特币开发商称,该漏洞影响到Android平台上的每一个比特币电子钱包应用程序,包括流行的比特币钱包(Bitcoin Wallet)、blockchain.info钱包(blockchain.info wallet)、BitcoinSpinner钱包(BitcoinSpinner Wallet)和Mycelium钱包(Mycelium Wallet)等。
该漏洞存在于Android系统随机生成数字串安全密钥的环节中。该漏洞的生成原因是对SecureRandom类的不正确使用方式导致的。 翻看Android的官方文档会发现。对于SecureRandom类的构造函数SecureRandom(byte[] seed)和SecureRandom#setSeed方法有一段安全性提醒:
“Seeds this SecureRandom instance with the specified Seeding SecureRandom may be insecure”