最近在逆向某Android App的时候复制了里面一段Java写的RSA解密代码,把它放在Windows上执行,结果发现解密失败,刚开始以为是密文数据或者公钥数据弄错了,调试了下发现密文数据或者公钥数据都没问题,问题发生在通过公钥数据生成公钥,在Window上生成的公钥是Sun RSA public key,在Android上生成的公钥是OpenSSLRSAPublicKey,原因可能和Jdk版本有关系:Window上使用的是SunJdk,Android上使用的是OpenJdk。

Windows:

public class ExampleUnitTest {

@Test

public void testGetPublicKey() {

try{

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

keyPairGenerator.initialize(1024);

KeyPair keyPair = keyPairGenerator.generateKeyPair();

RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

System.out.println(publicKey);

}catch (Exception e){

}

}

}

Sun RSA public key, 1024 bits

modulus: 95213884349438225170527524041975750351683444678161946275254426695337973208253569775466173664279298747653058061430975492241277502919945076896996944444736550396126983267986003483379392361465058231916774917978538137429201243314904997369770567867017186086453893426267549310093584324574550363215845297101263978509

public exponent: 65537

Android:

public class ExampleInstrumentedTest {

@Test

public void testGetPublicKey() {

try{

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

keyPairGenerator.initialize(1024);

KeyPair keyPair = keyPairGenerator.generateKeyPair();

RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

Log.d("Test", "testGetPublicKey: "+publicKey);

}catch (Exception e){

}

}

}

testGetPublicKey: OpenSSLRSAPublicKey{modulus=cbeecbec35b18cde50f2f201e441f5d9b57dacb2ba780a2f93152295d7661e822a570035e55217234d3f6070794faf28d5c3975fd62e1cfbf714cd379c8ee2166544a555e3f89c0be9074f8acccced9a9e1a8071a6c30abeea3bc5c8565dd34fd34794da50cb74e68c5f93e9f0925b60f87c89aacb25a9e357fd819ef0cf5a11,publicExponent=10001}

java publickey_Java中RSAPublicKey在不同平台的差异性相关推荐

  1. 如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量

    本文使用的例子源代码在我的github上. 在我的公众号文章在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务介绍了如何通过Cloud Connector ...

  2. Java代码中换行符怎么用

    可以使用Java中\n和\r的换行,不过也是有区别的,如下:1.\r 叫回车 Carriage Return2.\n 叫新行 New Line但是都会造成换行,使用System.getProperty ...

  3. 如何优雅地在 Java 8 中处理异常

    2019独角兽企业重金招聘Python工程师标准>>> 前言 Java 8 引入的流 (Stream) API 和 lambda 表达式为我们打开了新世界的大门,自此之后我们也可以在 ...

  4. 如何解决java.lang.NoClassDefFoundError:Java 9中的javax / xml / bind / JAXBException

    本文翻译自:How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9 I have s ...

  5. Java开发中Websocket的技术选型参考

    1. 前言 Websocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据 ...

  6. java学习笔记1--开发环境平台总结

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note1.html,转载请注明源地址. 1.Java程序设计语言 Java程序设计语言是一种高 ...

  7. java语言中解释方式是什么意思,Java语言快速入门·简答T

    1 面向对象与面向过程有什么区别? 面向对象编程:既然面向的是对象,那么强调的自然就是--对象,那么对象多了,就会抽象出相应的类(对象是类的实例化),所以 · 程序是由类组成 · 程序运行的时候去调用 ...

  8. Shell-通过shell启动Java类中的main方法 + 通过Shell启动jar包

    文章目录 概述 shell启动Java类中的main方法 启动脚本分析 启动脚本 shell启动jar包 概述 Java程序 运行在linux主机上, 通过shell脚本启动为进程. Java程序中 ...

  9. java aes密钥生成_如何在Java(Android)中生成与.Net中相同的AES密钥?

    我需要从.Net WebService提供的salt和密码生成 Java( Android)中的AES密钥.我需要使用与.net生成的密钥相同的密钥和相同的密码和盐(使用Rfc2898DeriveBy ...

最新文章

  1. 周志华:严肃的研究者就不该去触碰强人工智能
  2. Android模拟器环境下SD卡内容的管理[转]
  3. property、staticmethod、classmethod与__str__的用法
  4. JDK5--Annotation学习:基础(一)
  5. 基于Open WebRTC Toolkit(OWT)的8K全景视频低延时直播系统
  6. python中文注释
  7. Pseudo code:伪代码
  8. Scrum与项目管理亲体验
  9. project软件_Project软件操作篇——第三篇 优化计划
  10. 如何在软件里显示编译时间?__DATE__和__TIME__
  11. 3. Vue入门实战教程之vue-element-admin初体验
  12. 进阶实验5-3.2 新浪微博热门话题 (30 分)
  13. intel DQ77KB 主板使用说明书
  14. 东子破解的java设计模式状态模式
  15. linux uvc协议_UVCCamera-master
  16. 如何区分电梯卡为id卡ic卡_门禁卡ID卡和IC卡从外表怎么区分?
  17. maya python 的简单使用
  18. js实现彩票机选效果
  19. uniapp微信小程序实现按住说话功能
  20. Unity中利用材质自发光实现物体闪烁效果

热门文章

  1. ABAP入门程序,你会了嘛?
  2. SAPABAP性能优化技巧—使用二分查找(Binary Search)选项
  3. 在让元宇宙“圆梦”这条路上,交互技术卡在哪里了?
  4. python 执行shell命令行效率提升_在python脚本中执行shell命令的方法
  5. nofollow标签_nofollow标签在网站中的运用
  6. python中的reduce() 函数
  7. Python正则表达式的7个使用典范
  8. Python线程、进程知识整理
  9. linux驱动双摄像头,详解linux 摄像头驱动编写
  10. c#后台如何导出excel到本地_C#后台导出Excel