实际项目中,发现前端在生成公钥对象的时候并不是使用这种方式,而是通过对应的模数跟质数来构造公钥对象的,这样的话,需要进一步将生成的公钥取出对应的模数和质数。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. Android+openCV人脸检测2(静态图片)

    前几篇文章中有提到对openCV环境配置,这里再重新梳理导入和使用openCV进行简单的人脸检测(包括使用级联分类器) 一 首先导入openCVLibrary320 二 设置gradle的sdk版本号 ...

  2. GUI Design Studio的使用方法

    一.GUI Design Studio的介绍 GUI DesignStudio 是一个给应用软件设计图形用户界面的专业工具,它可在画基于web形态的原型时,可以用 Axure RP. Balsamiq ...

  3. NEL程序员专用轻钱包 进入0.01状态了

    这个轻钱包能干什么,现在就能在测试网看个余额,转个帐,调用个合约. 而且功能非常程序员化 你会说是不是没啥用   但是他有非常有用,因为他可以很容易的拼出NEOGUI拼不出来的交易 比如参与ICO交易 ...

  4. Elastic 之倒排索引(二)

    常规索引建立: 文档-->关键词的映射过程(正向索引) 缺点:费时 便利全部文档 倒排反向建立索引: 关键词-->文档的映射 反向到倒排索引:将索引的关键词出现的文档的位置和出现频率通过文 ...

  5. cadence单一原理图库的设计

  6. mysql字符集校对

    常用的两种 utf8_general_ci 按照普通的字母顺序,而且不区分大小写(比如:a B c D)utf8_bin 按照二进制排序(比如:A排在a前面,B D a c) ci是 case ins ...

  7. 解决vue webApp使用lib-flexible和px2rem引用第三方ui库后,样式变小问题

    首先,需要卸载项目中的postcss-px2rem. npm uninstall postcss-px2rem --save-dev 其次,安装postcss-px2rem-exclude npm i ...

  8. python3 参数*args 、 **args 在函数定义和调用中的应用

    一.函数调用时 说明:*args 表示解包(解包 列表.元组.字符串类型) #定义函数cn_musql def cn_musql(host,port,user,pwd,db): print(host) ...

  9. [ipsec][crypto] 在IPSec ESP使用AES-GCM加密时的IV

    IV IV是指初始化向量. 在我们当前讨论的场景中: 在IPSec ESP使用AES-GCM加密 IV有两个含义: 1. ESP报文封装时的IV,RFC中称为 AES-GCM IV +-+-+-+-+ ...

  10. C#即时释放内存

    using System;using System.Diagnostics;using System.Runtime.InteropServices; [DllImport("kernel3 ...