转载请注明出处
1.异常描述:
最近做项目为了增强数据传输的安全性用到了RSA加密。即android客户端将要传送的信息,用私钥通过RSA非对称加密算法加密后,传到服务器端(PC端)。服务器端用对应(密钥)的公钥来解密时解密失败,抛出“javax.crypto.BadPaddingException: Blocktype”异常。
2.异常原因:A
ndroid系统使用的虚拟机(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")。
关于javax.crypto.BadPaddingException: Blocktype错误的几种解决方法关于javax.crypto.BadPaddingException: Blocktype异常的几种解决办法转载请注明出处1.异常描述:最近做项目为了增强数据传输的安全性用到了RSA加密。即android客户端将要传送的信息,用私钥通过RSA非对称加密算法加密
最近做微信小程序获取用户绑定的手机号信息
解密
,试了很多
方法
。最终虽然没有完全
解决
,但是也达到我的极限了。有时会报错:
javax
.
crypto
.
BadPaddingException
: pad block corrupted。
首先说一下
解密
的流程
微信为了安全,把
解密
的key,和
加密
的用户数据分成了两步,分别给了前台,后台。这样,如果不监听到两次请求,是无法
解密
的。具体步骤:
1: 前端调取微...
关于Linux操作系统下AES
解密
失败的异常如下:
javax
.
crypto
.
BadPaddingException
: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
由于windows上每次生成的key都相同,但是在solaris或部分li...
公司最近做agent项目,需要对一些远程重要的请求参数进行
加密
。
加密
之前选型,选择了AES,而DES算法
加密
,容易被破解。网上有很多关于
加密
的算法的Demo案列,我发现这些Demo在Window平台运行正常,然后再MAC下就一直报错,现在选择网上常见的AES
加密
算法如下:
一· AES
加密
* AES
加密
字符串
* @param conten...
RSA
加
解密
遇到的问题。
1首先是私钥和公钥的读取
项目组使用的是.key格式的公私钥。已有读取代码,但是读取不到。百度说是pem格式,又去百度pem的读取,没有成功,很多博客里的好多都试过了,没有成功。先贴全部代码。
package cn.com.yusys.yusp.uaa.security;
* @项目名称: yusp-commons
* @类名称:
RSA
Uti