转载请注明出处

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