最近作一个基于android的客户端,客户端与Java服务器 (MyEclipse自带的Tomcat服务器)的通讯须要实施安全方案。而本人是使用非对称密钥来对数据进行加密的,客户端用公钥加密,服务器用私钥解 密。所以本人就用非对称密钥RSA算法来实施。而本人在最开始的时候,在android平台上与服务端初始化Cipher的时候都是使用一下这种方式:java

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

cipher.init(Cipher.ENCRYPT_MODE, key);

int blockSize = cipher.getBlockSize();

在这种状况下,android平台的客户端能够加密成功。而到了服务器这一端却没法解密,却抛出了如下异常:android

“java.lang.Exception: Blocktype mismatch: 0”算法

在网上搜索了不少资料,有不少解决AndroidRSA与Java加密标准不一样产生的。可是大部分解决方法都是说把android客户端和tomcat服务器上方法getInstance的参数写成统一形式,如:“RSA/ECB/PKCS1Padding”或者“RSA/None/PKCS1Padding”。可是当本人改为相同形式的时候,仍是出现上面的相同的异常:api

“java.lang.Exception: Blocktype mismatch: 0”。tomcat

最后终于找到了一种最根本的方法,就是在服务器上使用与Android客户端RSA算法中相同的Provider。android平台上RSA加密算法用的默认Provider是“org.bouncycastle.jce.provider.BouncyCastleProvider”。所以在服务端要想用私钥解密android客户端用公钥加密的数据,在得到Cipher对象的时候必须指定Provider为“org.bouncycastle.jce.provider.BouncyCastleProvider”。所以解决方法以下:安全

首先是环境配置:服务器

第一步:dom

首先须要得到“BouncyCastleProvider”的jar包。ide

而后把下载好了的jar(bcprov-jdk15-143.jar)放在目录:“F:\software_installed\Genuitec\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib”下。这里目录中粗体、斜体部分为本人MyEclipse的安装目录。ui

第二步:

须要在服务器上的目录:“F:\software_installed\Genuitec\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\security”下(目录中黑色粗体为本人MyEclipse安全目录),修改java.security文件,找到如下内容:

security.provider.1=sun.security.provider.Sun

security.provider.2=sun.security.rsa.SunRsaSign

security.provider.3=com.sun.net.ssl.internal.ssl.Provider

security.provider.4=com.sun.crypto.provider.SunJCE

security.provider.5=sun.security.jgss.SunProvider

security.provider.6=com.sun.security.sasl.Provider

security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI

security.provider.8=sun.security.smartcardio.SunPCSC

security.provider.9=sun.security.mscapi.SunMSCAPI

紧跟上面内容加上下面这句话:

security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

这里的数字“10”是在数字“9”的基础上递增的。

最后重启MyEclipse,重启动MyEclipse后,若是在library中没有发现该“bcprov-jdk15-143.jar”jar,那须要手工导入改jar包到你以前建好的工程中。

其次代码:

最后在android客户端和MyEclipse工程中获取Cipher对象的代码以下:

android:

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

MyEclipse工程里:

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",new BouncyCastleProvider());

值得注意的有两点:

一、代码中黑体和粗体要一致

二、代码中紫色部分为必须指定的Provider。

至此,由Android RSA与JavaRSA加密标准不一样产生能够完全解决了。

android java rsa加密_Android RSA与Java RSA加密不一样标准产生问题的解决方法相关推荐

  1. 虚幻引擎UE4.25版本使用Android打包出错提示:ERROR: cmd.exe failed with args /c 和 :app:assembleDebug的解决方法

    虚幻引擎 UE4.25版本使用Android打包出错提示:ERROR: cmd.exe failed with args /c 和 :app:assembleDebug的解决方法: 在虚幻引擎的jdk ...

  2. Java报错javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify解决方法

    文章目录 一.问题描述 二.解决方法 总结 一.问题描述 在利用SpringBoot开发项目时发现控制台中报了javax.net.ssl.SSLException MESSAGE: closing i ...

  3. java.lang.NoSuchMethodError: No virtual method log(ILjava/lang/String;Ljava/lang/Throwable;)解决方法

    报错如下: 原因: 包冲突,版本不一致 implementation 'com.squareup.okhttp3:okhttp:4.9.0' implementation 'com.squareup. ...

  4. 【PostgreSQL保存】java.io.IOException: Tried to send an out-of-range integer as a 2-byte value 问题分析+解决方法

    1.问题分析 项目里有一个从MySQL导入PostgreSQL然后利用GIS相关插件计算空间数据的定时任务,上线某地市没有任何问题,后期上线到一个大城市,定时任务报错 java.io.IOExcept ...

  5. 我的世界java版游戏崩溃_我的世界全攻略之-游戏崩溃的解决方法

    我的世界崩溃怎么办?下面吾爱网小编给大家带来我的世界无法正常启动的解决方法,需要的朋友可以参考下. 我的世界作为许多玩家都十分喜爱的模拟经营沙盘类游戏,经常有玩家反映在玩我的世界的时候,游戏总是会出现 ...

  6. eclipse中进行java编程时,CTRL+左键时,看不到源码的解决方法。

    第一种情况:eclipse中进行java编程时,CTRL+左键时,没有任何反应,解决方法: 设置方法:window-->preferences-- >General-->Editor ...

  7. java导出excel数字格式_POI 导出excel带小数点的数字格式显示不对解决方法

    最近看到了一个问题就是java导出excel中带小数点的数字显示不对, 比如我想在excel中第一行显示:  3,000.0 但是在excle中导出的格式总是不带小数点 3000(非文本格式),而且也 ...

  8. 游戏中java未安装不了_游戏运行库和常见游戏安装问题的解决方法

    游戏运行库是玩游戏必不可少的东西,相信玩家们都遇到因为没装某某运行库而导致游戏无法安装或者玩不了的问题,今天小编就为大家列出了一些常见的运行库以及游戏安装和运行时的一些问题的解决方法. 首先小编要为大 ...

  9. android keytool 不是内部命令或外部命令在 (win7下不能用的解决方法)

    android 关于MD5指纹中 keytool在win7下不能用的解决方法 只要在cmd中执行如下命令即可:注意C:\Users\Administrator\.android\debug.keyst ...

最新文章

  1. sklearn gridcv
  2. 用时间换才华:李开复给创业者的7条时间管理建议 【转载】
  3. Deep Learning(深度学习)相关网站
  4. python使用什么注释语句和运算-Python基础之注释,算数运算符,变量,输入和格式化输出...
  5. 掌握Python字典的12个例子
  6. 拿什么保护你,我的区块链
  7. 计算机组成原理实用教程课后答案,王万生《计算机组成原理实用教程》课后习题答案..doc...
  8. mysql MHA 集群搭建
  9. qt中如何模拟按钮点击_怎么在qt中实现一个按钮列表?
  10. VScode报错“终端将被任务重用,按任意键关闭
  11. 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(八)字符串处理指令
  12. 友盟分享Title设置
  13. python进阶 pdf_Python进阶(Intermediate_Python)_中文PDF彩色版.pdf
  14. 数字图像处理边缘检测算子matlab,使用roberts算子对图像进行边缘检测,并二值化的matlab代码实现...
  15. 中文 Uncode 编码范围
  16. 用Java实现美女选妃
  17. 【ZYNQ】从入门到秃头10 DDS增强版实验ADDA测试(基于ALINX 7020 AN108)
  18. 微信公众平台服务号配置JS接口安全域名
  19. Msg 547 The ALTER TABLE statement conflicted with the CHECK constraint .
  20. 最新国产操作系统uos一小时使用体验

热门文章

  1. 【Android】Android应用开发模板
  2. Hgame-week 1(部分)
  3. 写求职信的10条必要规则
  4. 21-ICME-FINE-GRAINED IMAGE RETRIEVAL VIA MULTIPLE PART-LEVEL FEATURE ENSEMBLE
  5. C++学习笔记之设计模式
  6. 使用RandomAccessFile建立用户注册表(user.txt)
  7. 用Joomla!打造超酷博客(Blog)
  8. 读书笔记-Greenplum企业应用实战:简介
  9. Android Studio 新版本 Logcat 速查
  10. 校园分期支付的机遇和风险