java - Java:如何生成 KeyPair 形式的私钥,只使用没有 BouncyCastle 的纯 Java.Security?
问题描述
Java:
如何生成KeyPair
表单私钥,只使用Java.Security
没有第三方提供商的纯BouncyCastle
?
我正在使用此代码生成KeyPair
:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256k1");
keyGen.initialize(ecSpec, new SecureRandom());
KeyPair keyPair = keyGen.generateKeyPair();
但是如果我想KeyPair
从我已经知道的私钥生成呢?我试图在网上找到解决方案,但没有成功。
解决方案
Java 中的公钥就是 s * G,其中 s 是私钥(一个向量),G 是椭圆曲线的基点。但是,没有办法在 Java 中执行 EC 点计算,所以你被卡住了。
您可以做的一件事是从外部库中提取 EC 点计算并使用它。好吧,好吧,或者您可以自己执行计算。BigInteger
毕竟,Java 确实为您提供了检索s 的值以及 G 的 x 和 y 值的选项。
通过使用 ECDH 进行计算有一种迂回的方法(毕竟这基本上是点乘法),但这是一个很长的解决方法,有很多黑客,所以自己执行计算更加容易和清洁。
推荐阅读
- excel - 使用宏将单元格信息粘贴到电子邮件正文
- spring-boot-admin - 2.1.4 SBA 文档中的 NotifierConfiguration 示例
- html - 在 React 中更改 html 字符串中文本框的大小
- python - 无法将时间序列数据读入 numpy 数组
- c - 在信号处理程序中遍历 TAILQ
- python - 将列表中未知数量的坐标分离成单独的坐标
- sql - 选择代码不等于 X 的 ID
- python - 如何显示seaborn产生的误差线的值?
- django - Django rest 框架 POST 多对多的额外字段
- graph - SAS中的图形使用gchart函数得出奇怪的值