`

关于javax.crypto.BadPaddingException: Blocktype异常的几种解决办法<转载>

阅读更多

请尊重劳动成果转载注明出处:http://blog.csdn.net/caoshichao520326/article/details/8731680
1.异常描述:最近做项目为了增强数据传输的安全性用到了RSA加密。即android客户端将要传送的信息,用私钥通过RSA非对称加密算法加密后,传到服务器端(PC端)。服务器端用对应(密钥)的公钥来解密时解密失败,抛出“javax.crypto.BadPaddingException: Blocktype”异常。

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")。

分享到:
评论

相关推荐

    android DES加密解密 javax.crypto.IllegalBlockSizeException: last block incomplete in

    本话题将围绕在Android中使用DES加密和解密时遇到的一个常见问题展开:`javax.crypto.IllegalBlockSizeException: last block incomplete in decryption`。 这个异常通常发生在解密过程中,当输入的数据块大小与DES...

    javax.crypto crypto.jar

    javax.crypto.Cipher; javax.crypto.KeyGenerator; javax.crypto.spec.SecretKeySpec等

    jar.zip解决The import javax.crypto cannot be resolved

    解决"The import javax.crypto cannot be resolved"问题的步骤通常如下: 1. **下载JCE和JSSE**:首先,你需要从Oracle官方网站或者其他可信的源下载JCE和JSSE的更新包。对于不同的JDK版本,这些扩展可能有不同的...

    图片处理 javax.imageio.IIOException: Unsupported Image Type

    综上所述,"javax.imageio.IIOException: Unsupported Image Type"是一个关于Java图像处理时遇到的典型问题,主要涉及图像格式、编码和解码器的支持。通过检查和调整代码,以及利用第三方库,可以有效地解决这个问题...

    javax-crypto.jar

    javax.crypto包提供了多种加密算法的实现,如AES(高级加密标准)、DES(数据加密标准)、RSA(公钥加密算法)等。这些算法在信息安全领域有着广泛的应用,如保护数据的隐私性、防止数据篡改等。 2. **密钥管理**...

    jdk10+ java.lang.NoClassDefFoundError: javax/xml/ws/Service 错误

    &lt;artifactId&gt;javax.activation-api&lt;/artifactId&gt; &lt;version&gt;1.2.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;javax.xml.bind&lt;/groupId&gt; &lt;artifactId&gt;jaxb-api&lt;/artifactId&gt; &lt;version&gt;2.3.1&lt;/version&gt; ...

    AES加密DEMO(javax.crypto.Cipher NET实现)

    本DEMO主要介绍了如何利用`javax.crypto.Cipher`类在.NET环境中实现AES加密。 AES加密的特点在于其高效的加解密性能和强大的安全性。它基于一个固定大小的密钥,常见的有128位、192位和256位三种,其中128位是默认...

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; boundary="----=_Part_0_1760344884.1407394057461" 第一步:需要先grantq权限: EXEC dbms_java.grant_...

    javax.servlet-3.0.0.v201112011016-API文档-中文版.zip

    赠送jar包:javax.servlet-3.0.0.v201112011016.jar; 赠送原API文档:javax.servlet-3.0.0.v201112011016-javadoc.jar; 赠送源代码:javax.servlet-3.0.0.v201112011016-sources.jar; 赠送Maven依赖信息文件:...

    javax.servlet-3.0.0.v201112011016-API文档-中英对照版.zip

    赠送jar包:javax.servlet-3.0.0.v201112011016.jar; 赠送原API文档:javax.servlet-3.0.0.v201112011016-javadoc.jar; 赠送源代码:javax.servlet-3.0.0.v201112011016-sources.jar; 赠送Maven依赖信息文件:...

    javax.servlet-api-4.0.1.jar中文文档.zip

    &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'javax.servlet', name: 'javax.servlet-api', version: '***' ...

    javax.servlet-api-3.1.0.jar中文文档.zip

    &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'javax.servlet', name: 'javax.servlet-api', version: '***' ...

    javax.naming.NamingException: Cannot create resource instance

    javax.naming.NamingException: Cannot create resource instance类加载异常,希望可以帮助跟我一样错误的人。

    javax.persistence.jar

    Files contained in javax.persistence.jar: META-INF/MANIFEST.MF javax.persistence.Access.class javax.persistence.AccessType.class javax.persistence.AssociationOverride.class javax.persistence....

    javax.annotation-api-1.3.2-API文档-中文版.zip

    赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.3.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-...

    javax.mail-1.5.6-API文档-中文版.zip

    赠送jar包:javax.mail-1.5.6.jar; 赠送原API文档:javax.mail-1.5.6-javadoc.jar; 赠送源代码:javax.mail-1.5.6-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.5.6.pom; 包含翻译后的API文档:javax.mail...

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    当你遇到“找不到javax.servlet.*”这样的错误时,通常是因为你的项目缺少了这个库,所以需要引入`javax.servlet.jar`来解决问题。 1. **Java Servlet简介** Java Servlet是Java平台上的一个标准,用于扩展服务器...

    javax.mail-1.6.2-API文档-中英对照版.zip

    赠送jar包:javax.mail-1.6.2.jar; 赠送原API文档:javax.mail-1.6.2-javadoc.jar; 赠送源代码:javax.mail-1.6.2-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.6.2.pom; 包含翻译后的API文档:javax.mail...

    javax.xml.rpc相关jar包

    描述中提到的“解决javax.xml jar包缺失的问题,引进javax.xml.rpc-api-1.1.1.jar”,意味着在开发或运行某个Java项目时,可能会遇到由于缺少`javax.xml.rpc`相关的jar包导致的编译或运行错误。为了解决这个问题,...

    javax.transaction-api-1.2-API文档-中文版.zip

    赠送jar包:javax.transaction-api-1.2.jar; 赠送原API文档:javax.transaction-api-1.2-javadoc.jar; 赠送源代码:javax.transaction-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.transaction-api-1.2....

Global site tag (gtag.js) - Google Analytics