做网站的困难,宁波网络建站,自己做网站图片存在哪里,东莞市网络seo推广哪家好1. 出错描述#xff1a;服务RSA解密抛出javax.crypto.BadPaddingException: Decryption error2.出错原因#xff1a;Android系统使用的虚拟机(dalvik)跟SUN标准JDK是有所区别的#xff0c;其中他们默认的RSA实现就不同。即Android端用Cipher.getInstance(RSA)方…1. 出错描述服务RSA解密抛出javax.crypto.BadPaddingException: Decryption error2.出错原因Android系统使用的虚拟机(dalvik)跟SUN标准JDK是有所区别的其中他们默认的RSA实现就不同。即Android端用Cipher.getInstance(RSA)方法进行加密时使用的provider是Bouncycastle Security providerBouncycastle Security provider默认实现的是“RSA/None/NoPadding”算法而服务器(PC)端用Cipher.getInstance(RSA)进行解密时使用的是Sun的security provider实现的是“RSA/None/PKCS1Padding”算法所以解密时会失败。3. 解决方法Android端的加密算法如下/*** 公钥加密* param data 待加密数据* param key 密钥* return byte[] 加密数据* */public static byte[] encryptByPublicKey(byte[] data,String key) throws Exception{//解密密钥byte[] keyBytes decryptBASE64(key);//实例化密钥工厂KeyFactory keyFactoryKeyFactory.getInstance(KEY_ALGORITHM);//初始化公钥//密钥材料转换X509EncodedKeySpec x509KeySpecnew X509EncodedKeySpec(keyBytes);//产生公钥PublicKey pubKeykeyFactory.generatePublic(x509KeySpec);//数据加密Cipher cipherCipher.getInstance(RSA/None/PKCS1Padding);//Android端使用cipher.init(Cipher.ENCRYPT_MODE, pubKey);return cipher.doFinal(data);}