我写了一个示例程序,输出以下内容:
FL261:java jvah$javac -cp bcprov-ext-jdk15on-149.jar ECTest.java
FL261:java jvah$java -cp bcprov-ext-jdk15on-149.jar:. ECTest
Private key: 7ba78909571fbc336b2b94054dfb745a6b0776ff36a8fa98a598dc32cb83cc8e
Public key: 035b9e4a6148c9f9b08b573871ac66a832e6e9f63cf117545523a45b8017b7c43f
Calculated public key: 035b9e4a6148c9f9b08b573871ac66a832e6e9f63cf117545523a45b8017b7c43f
Congratulations, public keys match!
FL261:java jvah$
代码应该足够清楚,以便您可以理解这里所做的事情.请注意,您必须知道为您的私钥生成哪条曲线,否则无法生成匹配的公钥.示例代码使用secp256r1曲线,这是很常用的.
import java.math.BigInteger;
import java.security.SecureRandom;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.asn1.sec.SECNamedCurves;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycast