1.最近做RSA加密用于增强android客户机与服务器(JavaEE)数据传输的安全性。发现在andorid机器上生成的(密钥对由服务器在windows xp下生成并将公钥发给客户端保存)密码无法在服务器通过私钥解密。

2.为了测试,在服务器本地加解密正常,另外,在android上加解密也正常,但是在服务器中加密(使用相同公钥)后的密码同样无法在android系统解密(使用相同私钥)。

3.由于对RSA加密算法不了解,而且对Java RSA的加密过程也不清楚、谷歌一番,才了解到可能是加密过程中的填充字符长度不同,这跟加解密时指定的RSA算法有关系。

4.比如,在A机中使用标准RSA通过公钥加密,然后在B系统中使用“RSA/ECB/NoPadding”使用私钥解密,结果可以解密,但是你会发现解密后的原文前面带有很多特殊字符,这就是在加密前填充的空字符;如果在B系统中仍然使用标准的RSA算法解密,这在相同类型的JDK虚拟机环境下当然是完全一样的,关键是android系统使用的虚拟机(dalvik)跟SUN标准JDK是有所区别的,其中他们默认的RSA实现就不同。

5.更形象一点,在加密的时候加密的原文“abc”,你直接使用“abc”.getBytes()方法获得的bytes长度可能只有3,但是系统却先把它放到一个512位的byte数组里,new byte[512],再进行加密。但是解密的时候你使用的是“加密后的密码”.getBytes()来解密,解密后的原文自然就是512长度的数据,即是在“abc”之外另外填充了500多字节的其他空字符。

引用:

Afters some hours of trying, confirming that the key pairs are the same, using different options of saving the public key in the Android filesystem, etc. I finally found a post stating that Android is using the Bouncycastle Security provider. Bouncycastle’s default RSA implementation is: “RSA/None/NoPadding”, whereas Sun’s default security provider implementation is “RSA/None/PKCS1Padding”. So, no decryption possible when just using

 Cipher.getInstance("RSA") 

because of the different paddings used.

So for a solution I downloaded the bouncycastle Jar, added bounycastle as a Security provider to my Java App, and now use

 Cipher.getInstance("RSA", "BC"); 

It works fine now.

EOF.这位仁兄分析说android系统的RSA实现是"RSA/None/NoPadding",而标准JDK实现是"RSA/None/PKCS1Padding" ,这造成了在android机上加密后无法在服务器上解密的原因(服务器使用的是SUN JDK6.0)。

我自己的总结:其实只要加载bouncycastle Jar到PC服务端和android客户端即可。

另外

  1. KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA",
  2. new org.bouncycastle.jce.provider.BouncyCastleProvider());
 
所有getInstantce方法里必须写成如上形式才可。

转载于:https://www.cnblogs.com/zhoujingjin/archive/2013/04/27/3047198.html

javax.crypto.BadPaddingException: Blocktype ...相关推荐

  1. javax.crypto.BadPaddingException: Data must sta...

    为什么80%的码农都做不了架构师?>>>    错误:javax.crypto.BadPaddingException: Data must start with zero RSA是 ...

  2. javax.crypto.BadPaddingException: Given final block not properly padded解决方案

    javax.crypto.BadPaddingException: Given final block not properly padded解决方案 参考文章: (1)javax.crypto.Ba ...

  3. Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded

    参考:http://blog.csdn.net/rj042/article/details/8196125 单点登录:https://github.com/ebnew/ki4so redis客户端操作 ...

  4. exception javax.crypto.BadPaddingException: Given final block not properly padded

    exception javax.crypto.BadPaddingException: Given final block not properly padded CreationTime--2018 ...

  5. javax.crypto.BadPaddingException: Given final block not properly padded 解决方法

    javax.crypto.BadPaddingException: Given final block not properly padded 解决方法 参考文章: (1)javax.crypto.B ...

  6. RSA解密失败:javax.crypto.BadPaddingException : Decryption error

    一.由于项目需要,前端把密码用RSA加密后传输到后端,后端进行RSA解密后再与数据库中的密码进行对比,接受到前端传过来的加密后的密码,在进行解密的时候出现错误了: javax.crypto.BadPa ...

  7. 小程序对encryptedData进行解密报错javax.crypto.BadPaddingException: pad block corrupted

    第一次写小程序登陆授权,踩了很多坑.什么用encryptedData.iv.code这些参数去登录,其实只要一个code就够了. 还有各种看不太明白的参数secret.authorization_co ...

  8. 微信一键登录解密手机号出现javax.crypto.BadPaddingException: pad block corrupted错误

    <button class="weui-btn btn-login" open-type="getPhoneNumber" bindgetphonenum ...

  9. RSA解密时javax.crypto.BadPaddingException: Data must start with zero

    解决方法:要在加密后产生的byte数组转成string时要在各byte之间加个标识符,我加了个空格, 然后再根据空格分隔转换回byte数组.如果不加标识符,由于byte值可能是一位到三位,无法知道某一 ...

最新文章

  1. Win2008学习(二),群集的仲裁配置
  2. 技术揭秘!百度搜索中台低代码的探索与实践
  3. php打印从1到1000,输入一个链表的头节点,从尾到头打印每个节点的值,利用PHP如何实现?...
  4. Android Studio问题集锦
  5. 【深度学习】神经网络结构搜索(NAS)与多模态
  6. oracle行级的触发器,Oracle触发器Trigger2行级
  7. VB案例:简易记事本
  8. blog.mm index.php,每天一个WordPress文件:index.php
  9. pandas输出到excel_精通Pandas,从零基础到中级运用,看这一篇就够了
  10. 天网防火墙Athena 2006正式发布
  11. Dezender下载及使用说明
  12. 如何快速将pdf转换成excel转换器
  13. 「文献解读」RNAi在油菜研究中的应用
  14. Superset部署+连接MySQL8+省份地图可视化
  15. 『XXG探索』canvas 获取图片主体颜色
  16. 落单的数(落单的数 落单的数 II 落单的数 III)
  17. [虚拟现实] 手把手,一起开发一个基于VR的投篮球小游戏
  18. 盘点 100 个最受欢迎的 Java 库!绝对经典
  19. java 链表逆序 递归,java用递归和非递归实现链表逆序
  20. 毕业设计撰写开题报告,“一砖一瓦皆根基”-02

热门文章

  1. [leetcode]5. 最长回文子串
  2. [leetcode]227. 基本计算器 II
  3. 分治法——查找问题 —— 寻找一个序列中第k小的元素和查找最大和次大元素
  4. 块状树(bzoj 3720: Gty的妹子树)
  5. [汇编语言计算机原理] 带开机音乐,速度、进度和行驶方向显示的出租出计费系统设计
  6. python后台架构Django教程——项目配置setting
  7. python网络爬虫系列教程——PhantomJS包应用全解
  8. (四)pscc学习笔记
  9. 怎么修改兼容模式html,HTML5中怎么调兼容性?
  10. java web中的重定向和转发,forward和sendRedriect