关于android端和java端的javax.crypto.BadPaddingException异常问题总结
2014-06-09 10:31
239 查看
关于android端和java端的javax.crypto.BadPaddingException异常问题总结
1.异常描述:最近做项目为了增强数据传输的安全性用到了RSA加密。即android客户端将要传送的信息,用私钥通过RSA非对称加密算法加密后,传到服务器端(PC端)。服务器端用对应(密钥)的公钥来解密时解密失败,抛出“javax.crypto.BadPaddingException: Blocktype mismatch: 1”异常。
2.异常原因:Android系统使用的虚拟机(dalvik)跟SUN标准JDK是有所区别的,其中他们默认的RSA实现就不同。即Android端用Cipher.getInstance("RSA")方法进行加密时,使用的provider是Bouncycastle
Security provider,Bouncycastle Security
provider默认实现的是“RSA/None/NoPadding”算法,而服务器(PC)端用Cipher.getInstance("RSA")进行解密时,使用的是Sun的security
provider,实现的是“RSA/None/PKCS1Padding”算法,所以,解密时会失败。
3.解决办法:这里提供三种解决办法:
第一种:将服务器(pc)端的Cipher.getInstance("RSA")方法改为Cipher.getInstance("RSA/ECB/NoPadding")。但这种改法有一个缺点就是解密后的明文比加密之前多了很多空格。(空格的长度个数+原来的明文字符数=产生密钥时采用的bit数/8)
第二种:将Android端的Cipher.getInstance("RSA")方法改为Cipher.getInstance("RSA/None/PKCS1Padding")。这种方法解密后的明文和加密前的明文是对应的,不会出现第一种方法中的现象,推荐这种方法。
第三种:在服务器(pc)端的jdk中加入Bouncycastle
Security provider,关于Bouncycastle JCE的安装配置及验证请参看 http://blog.csdn.net/caoshichao520326/article/details/8732670 href="http://blog.csdn.net/caoshichao520326/article/details/8732670" target=_blank>点击打开链接, 配置好Bouncycastle
Security provider后,将服务器(pc)端的Cipher.getInstance("RSA")方法改为Cipher.getInstance("RSA","BC")。
1.异常描述:最近做项目为了增强数据传输的安全性用到了RSA加密。即android客户端将要传送的信息,用私钥通过RSA非对称加密算法加密后,传到服务器端(PC端)。服务器端用对应(密钥)的公钥来解密时解密失败,抛出“javax.crypto.BadPaddingException: Blocktype mismatch: 1”异常。
2.异常原因:Android系统使用的虚拟机(dalvik)跟SUN标准JDK是有所区别的,其中他们默认的RSA实现就不同。即Android端用Cipher.getInstance("RSA")方法进行加密时,使用的provider是Bouncycastle
Security provider,Bouncycastle Security
provider默认实现的是“RSA/None/NoPadding”算法,而服务器(PC)端用Cipher.getInstance("RSA")进行解密时,使用的是Sun的security
provider,实现的是“RSA/None/PKCS1Padding”算法,所以,解密时会失败。
3.解决办法:这里提供三种解决办法:
第一种:将服务器(pc)端的Cipher.getInstance("RSA")方法改为Cipher.getInstance("RSA/ECB/NoPadding")。但这种改法有一个缺点就是解密后的明文比加密之前多了很多空格。(空格的长度个数+原来的明文字符数=产生密钥时采用的bit数/8)
第二种:将Android端的Cipher.getInstance("RSA")方法改为Cipher.getInstance("RSA/None/PKCS1Padding")。这种方法解密后的明文和加密前的明文是对应的,不会出现第一种方法中的现象,推荐这种方法。
第三种:在服务器(pc)端的jdk中加入Bouncycastle
Security provider,关于Bouncycastle JCE的安装配置及验证请参看 http://blog.csdn.net/caoshichao520326/article/details/8732670 href="http://blog.csdn.net/caoshichao520326/article/details/8732670" target=_blank>点击打开链接, 配置好Bouncycastle
Security provider后,将服务器(pc)端的Cipher.getInstance("RSA")方法改为Cipher.getInstance("RSA","BC")。
相关文章推荐
- 关于android端和java端的javax.crypto.BadPaddingException异常问题总结
- 关于 android AES 部分机器 javax.crypto.BadPaddingException: pad block corrupted
- 关于javax.crypto.BadPaddingException: Blocktype异常的几种解决办法
- Android 中使用java aes加密算法,报错信息android javax.crypto.BadPaddingException: pad block corrupted解决办法
- Java安全架构____RSA加密配置第三方加密库问题_javax.crypto.BadPaddingException: Decryption error
- Java安全架构____RSA加密配置第三方加密库问题_javax.crypto.BadPaddingException: Decryption error
- 利用java api 实现 RSA算法 解决(javax.crypto.BadPaddingException: Data must start with zero)
- 关于解决RSA非对称加密时,将密文存入数据库取出后,再对密文解密的时候抛出javax.crypto.BadPaddingException: Data must start with zero
- 关于javax.crypto.BadPaddingException: Blocktype错误的几种解决方法
- 关于javax.crypto.BadPaddingException: Blocktype错误的几种解决方法
- Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded
- RSA 加密解密 关于javax.crypto.BadPaddingException: Blocktype错误的几种解决方法
- 左右 android AES 所述机器的一部分 javax.crypto.BadPaddingException: pad block corrupted
- 使用Java 对称加密(AES),提示"javax.crypto.BadPaddingException: Given final block not properly padded"
- Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded
- Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded
- Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded
- Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded
- 关于javax.servlet.jsp.JspException:java.net.MalformedURLException异常问题
- javax.crypto.BadPaddingException: Blocktype mismatch: 0 RSA加密,Android到服务器解密报错