首页 > 解决方案 > 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从我已经知道的私钥生成呢?我试图在网上找到解决方案,但没有成功。

标签: javacryptographybouncycastlepublic-key-encryption

解决方案


Java 中的公钥就是 s * G,其中 s 是私钥(一个向量),G 是椭圆曲线的基点。但是,没有办法在 Java 中执行 EC 点计算,所以你被卡住了。

您可以做的一件事是从外部库中提取 EC 点计算并使用它。好吧,好吧,或者您可以自己执行计算。BigInteger毕竟,Java 确实为您提供了检索s 的值以及 G 的 x 和 y 值的选项。

通过使用 ECDH 进行计算有一种迂回的方法(毕竟这基本上是点乘法),但这是一个很长的解决方法,有很多黑客,所以自己执行计算更加容易和清洁。


推荐阅读