Java:如何生成私钥形式的KeyPair,只使用纯Java.Security而不使用BouncyCastle?



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点计算并使用它。好吧,好吧,或者您可以自己执行计算。毕竟,Java确实为您提供了检索s的BigInteger值以及G的x和y值的选项。

有一种使用 ECDH 进行计算的迂回方法(毕竟基本上点乘法(,但这是一个如此漫长的解决方法,有很多技巧,自己执行计算要容易得多,也更干净。

最新更新