关于android端和java端的javax.crypto.BadPaddingException异常问题总结

来源:互联网 发布:淘宝企业店铺申请 编辑:程序博客网 时间:2024/05/16 15:41

关于android端和java端的javax.crypto.BadPaddingException异常问题总结




关于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点击打开链接, 配置好Bouncycastle Security provider后,将服务器(pc)端的Cipher.getInstance("RSA")方法改为Cipher.getInstance("RSA","BC")。


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 体育营销案例分析 体育经纪人 体育公共服务 中考 体育 体育时空编辑部 体育竞猜网 体育班班服 体育运动减肥 轻体育 体育画册设计 新良体育 大明宫龙行体育活动中心 中学体育教学设计 体育的娱乐功能 sohu体育 体育特长学校 五星体育北极虾 体育舞蹈拉丁舞 体育单招吧 体育 单招 体育嘉苑二手房 什么是体育单招 首都体育学院宾馆 体育班班服图片 体育老师 保健体育 体育与健康 易网体育 qq体育 极速体育吧 体育手抄报 体育小报 体育经济 体育的功能 极速体育app 体育生 体育篮球 体育的定义 体育吧极速体育 极限体育 体育吧