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 进行计算的迂回方法(毕竟基本上是点乘法(,但这是一个如此漫长的解决方法,有很多技巧,自己执行计算要容易得多,也更干净。