RSA加解密 块域异常 javax.crypto.BadPaddingException: block incorrect

异常描述:

最近做项目为了增强数据传输的安全性用到了RSA加密。即android客户端将要传送的信息,用私钥通过RSA非对称加密算法加密后,传到服务器端(PC端)。服务器端用对应(密钥)的公钥来解密时解密失败,抛出“javax.crypto.BadPaddingException: Blocktype”异常。

异常原因:

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”算法,所以,解密时会失败。

三种解决办法:

  • 第一种解决方法

第一种:将服务器(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”)。

进行接口调试时 RSA 加解密 中的解密操作时报错,下面是详细的报错: java x. crypto . Bad Padding Exception : Decryption error at sun.security. rsa . RSA Padding .unpadV15( RSA Padding . java :380) ~[na:1.8.0_131] at sun.security. rsa . RSA Padding .unp... org.apache.shiro. crypto . Crypto Exception : Unable to execute 'doFinal' with cipher instance [ java x. crypto .Cipher@17359b49]. at org.apache.shi
最近做微信小程序获取用户绑定的手机号信息解密,试了很多方法。最终虽然没有完全解决,但是也达到我的极限了。有时会报错: java x. crypto . Bad Padding Exception : pad block corrupted。 首先说一下解密的流程 微信为了安全,把解密的key,和 加密 的用户数据分成了两步,分别给了前台,后台。这样,如果不监听到两次请求,是无法解密的。具体步骤: 1: 前端调取微...
数据上传第三方接口需要对数据进行 RSA 加密 验签, 加密 的数据本地demo是可以通过的线上 加密 数据对方无法解密。 报错内容: java x. crypto . Bad Padding Exception : Decryption error at sun.security. rsa . RSA Padding .unpadV15( RSA Padding . java :379) at sun.security. rsa . RSA Padding .unpad( RSA Padding . java :290) at com.sun.cry 在某些语言中,大括号(或其他定界符)对于块是可选的。当省略分隔符时,某条语句被认为是在块中,而实际情况却不在块中,这种情况下就可到招致逻辑错误。。在某些情况下,逻辑错误可能会带来安全隐患。
##**简单的前言描述** 由于公司即将需要对接香港永隆银行的生活商城平台(公司业务场景: 将嵌入永隆银行APP里拉起相对应的接口功能),对方已经直接发交互文档API,但是在阅读过程中,发现在调起对方的支付接口时,发现对方要求请求参数中(订单明细参数使用的是ASE256( 加密 的数据)算法进行 加密 传输,签名数据参数使用的是 RSA 2048和SHA256算法进行双重 加密 传输)。具体请求参数如下图: import java .security.Key; import java .security.KeyFactory; import java .security.KeyPair; import java .security.KeyPairGenerator; import java .security.interfaces. RSA Pri
Caused by: java x. crypto . Bad Padding Exception : Decryption error at sun.security. rsa . RSA Padding .unpadV15( RSA Padding . java :380) at sun.security. rsa . RSA Padding .unpad( RSA Padding . java :291) at com...
在获取到微信的用户昵称头像信息、手机号码信息,小程序为了保证数据安全提供了 aes 加密 ,后端想要保存这些信息就必须进行解密。 本文就记录下项目中用使用 java 开发语言对微信小程序前端的 加密 数据进行解密时碰到的问题。 正常按照小程序推荐的流程开发,按照下图流程 每次进入小程序,前端将code传到后台,后端根据code、appid、appsecret获取用户的session_key和open...
/// PEM格式公钥转换成XML格式公钥 /// </summary> /// <param name="publicKey">PEM格式公钥,(纯文字字符,注意不带-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----)</param>
RSA 解密,报错:“cn.hutool. crypto . Crypto Exception : Bad Block Exception : unable to decrypt block
RSA 解密报错: java x. crypto . Bad Padding Exception : Decryption error RSA 解密方法默认byte数组长度为128,实际上长度应该为256。 把 RSA 解密方法中的: byte[] buffer = new byte[128]; byte[] buffer = new byte[256]; 如果对你有用,请打赏博主任意金额,感兴趣...
This project contains Java compilation errors, which can cause rendering failures for custom views 西瓜323: 清缓存然后真的不报错了 四年android转前端开发有感而发 小矮子tt: 目前还在搞安卓,也做了个蓝牙项目 表情包 ,但是原生感觉走不远了,转行也没有竞争优势,打算先以公司需求为主,后面能干就干,找不到工作就换行了。如果要转行还是前端为主,再学点后端慢慢搞全栈吧,比较适合在中小公司混 Android Git使用android studio来获取Gitlab上的项目 BlaCkcAtsss: 能不能直接在终端 clone 网址? 四年android转前端开发有感而发 hjt497821976: [email protected] 大佬 求书籍