实际项目中,发现前端在生成公钥对象的时候并不是使用这种方式,而是通过对应的模数跟质数来构造公钥对象的,这样的话,需要进一步将生成的公钥取出对应的模数和质数。openssl、java api都可以将质数跟模数取出来。

正常生成公私钥如下:

1.通过openssl工具取出模数和质数

  命令行使用 openssl rsa -in priKey.pem -noout -text,得到下图中的modules以及publicExponent

  这里我们都取十六进制的。这样对应的模数(前面的00去掉即可)跟质数就出来了。
2.通过java api取对应的模数跟质数

package com.wangjinxiang.genkey.util;

import java.security.interfaces.RSAPublicKey;
import org.apache.commons.codec.binary.Base64; public class KeyModulesAndExponentUtil { private static String PUBKEY_TEXT = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxdHDlJrjF+anpWRbiLuN2Hu9oPaABcVKAJSCq3UEreIn33ldx645l+9RDat6THqJEeTjRt9orogXwpAeFkDqje0YFjTu4v3eyLnkGjg3oDozYCoY9c7vfQ/BMw3X+2Wy0lYpRg23qis0lWB/ZdoVnj6SP0fcXBiqJSk+/deZNVreUvozl0X1o17EyJsKGJd2Uk0ltC3DfRve0TK1TJp4pssEDLRqFPAVJSJjFEe2lr6IUKDlv9ArPRZXh67zxxe1t/qW+tJSJjhaQKFLwpYVmpNnPNuYJ7gLqLPxDiqosFVJK0q3On2IFbviaXMhwGv85GD2Exlmn9KDW4p1box6QQIDAQAB"; public static void getModulesAndExponent() throws Exception { try {
// 解密由base64编码的公钥,并构造X509EncodedKeySpec对象
java.security.spec.X509EncodedKeySpec bobPubKeySpec = new java.security.spec.X509EncodedKeySpec(
Base64.decodeBase64(PUBKEY_TEXT));
// RSA算法
java.security.KeyFactory keyFactory = java.security.KeyFactory.getInstance("RSA");
// 取公钥匙对象
RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(bobPubKeySpec); System.out.println("modules: 0x" + pubKey.getModulus().toString(16));
System.out.println("publicExponent: 0x" + pubKey.getPublicExponent().toString(16));
}catch(Exception e) {
throw e;
}
} public static void main(String[] args) {
try {
KeyModulesAndExponentUtil.getModulesAndExponent();
} catch (Exception e) {
e.printStackTrace();
}
}
}

  打印出来的结构跟使用openssl工具是一样的。

  至此,这两种方法都可以正确取出模数(modules)和质数(publicExponent),这时,就可以把获得的模数和质数给到前端了,我也可以用获得的模数和质数模拟前端加密处理了。

RSA公私钥获取模数和质数的更多相关文章

  1. Openssl生成RSA公私钥以及将公钥转换成C#支持的格式

    Openssl生成RSA公私钥以及将公钥转换成C#支持的格式 1.RSA算法介绍 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密.RSA ...

  2. java生成RSA公私钥字符串,简单易懂

    java生成RSA公私钥字符串,简单易懂   解决方法: 1.下载bcprov-jdk16-140.jar包,参考:http://www.yayihouse.com/yayishuwu/chapter ...

  3. PHP RSA公私钥的理解和示例说明

    1.生成公钥和私钥 要应用RSA算法,必须先生成公钥和私钥,公钥和私钥的生成可以借助openssl工具.也可以用在线生成公私钥.(网站:http://web.chacuo.net/netrsakeyp ...

  4. RSA 公私钥 互换问题

    关于 RSA,我的理解是: 按定义的话,公私钥是可以互换的 问题是常见的实现里面,保存“私钥”的那个数据结构或者文件,里面除了私钥所必需的那一对数之外,还有额外的信息(足以算出公钥来),所以绝对不能把 ...

  5. NetCore 生成RSA公私钥对,公钥加密私钥解密,私钥加密公钥解密

    using Newtonsoft.Json; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Encodings; using ...

  6. openssl生成rsa公私钥

    1.生成私钥pem,  执行命令openssl genrsa -out rsa_private_key.pem 1024 2.生成公钥,执行命令openssl rsa -in rsa_private_ ...

  7. OpenSSL生成RSA公私钥(java)

    生成私钥:genrsa -out rsa_private_key.pem 1024 生成公钥:rsa -in rsa_private_key.pem -out rsa_public_key.pem - ...

  8. Python rsa公私钥生成 rsa公钥加解密(分段加解密)-私钥加签验签实战

    一般现在的SAAS服务提供现在的sdk或api对接服务都涉及到一个身份验证和数据加密的问题.一般现在普遍的做法就是配置使用非对称加密的方式来解决这个问题,你持有SAAS公司的公钥,SAAS公司持有你的 ...

  9. Java中使用OpenSSL生成的RSA公私钥进行数据加解密

    当前使用的是Linux系统,已经按装使用OpenSSL软件包, 一.使用OpenSSL来生成私钥和公钥 1.执行命令openssl version -a 验证机器上已经安装openssl 1 open ...

随机推荐

  1. CAP分布式事务 学习及简单demo

    完全参考 github的指导 demo地址, Pub使用 efcore , Sub 使用 dapper, mysql数据库 https://files.cnblogs.com/files/xtxtx/ ...

  2. 《学习之道》第八章孤军奋战or组队合作

    孤军奋战与组队合作:别再苦思冥想,拖延行为需要差别对待 对拖延我得提一个小建议,你要暂时把自己与那些会干扰你的人和事隔离开.自己到一个房间里去,或者去图书馆,这样就没什么事能让你分心了. 如果一门课让 ...

  3. 咸鱼入门到放弃6--jsp<一>三指令

    JSP全称是Java Server Pages 它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...

  4. 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)

    如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...

  5. 一、自动化平台搭建-python虚拟环境安装

    主要知识点介绍: 安装django环境 创建django项目 设计模型类并利用模型类和数据库进行交互 使用django后台管理数据 编写视图函数,进行URL配置 模板的使用 图书-英雄案例完成 1.虚 ...

  6. git 入门教程之分支总览

    分支就是一条独立的时间线,既有分支,必有主干,正如一棵树谈到树枝,必有树干一样的道理.我们先前对git 的全部操作默认都是在主干上进行的,这个主干也是一种特殊的分支,名为 master 分支. 无论是 ...

  7. 为什么Dotnet Core的DI默认是在控制器中注入

    转载请注明出处: https://www.cnblogs.com/zhiyong-ITNote/ DI的大概过程抽象成如下:接口对象 <-- 实现对象 <-- 抽象对象 在抽象对象中引入接 ...

  8. (二)文档请求不同源之window.name跨域

    一.基本原理 window.name不是一个普通的全局变量,而是当前窗口的名字.这里要注意的是每个iframe都有包裹它的window,而这个window 是top window的子窗口,而它自然也有 ...

  9. CentOS6.5安装图形用户界面

    CentOS 6.5 安装图形界面 安装的时候没有安装图像界面.安装步骤如下: 1.yum -y groupinstall Desktop 2.yum -y groupinstall "X ...

  10. 五一劳动节,讲讲NEO智能合约的调试

    之前我们说过NEO智能合约的调试问题,过去了一段时间,有很多东西都发生了比较大的变化.让我们重新再来探讨一下这个话题. 先说日期,2018年4月27日,马上迎来劳动节.   以后可能还会再次谈论这个话 ...