如何使用海绵城堡为比特币曲线 (secp256k1) 创建 ECDSA 密钥对(256 位)?

How to create ECDSA keypair (256bit) for bitcoin curve (secp256k1) using spongy castle?

目前,我正在使用此方法创建密钥对

private  KeyPair getKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException {
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDsA", "SC");
    ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256k1");
    keyGen.initialize(ecSpec, new SecureRandom());
    return keyGen.generateKeyPair();
}

KeyPairGenerator 还有另一种方法,我可以在其中指定 keySize,但我不确定如何传递 keySpecs?

 public void initialize(int keysize, SecureRandom random)

documentation for KeyPairGeneratorinitialize(int, SecureRandom) 这样做:

Initializes the key pair generator for a certain keysize with the given source of randomness (and a default parameter set).

KeyPairGenerator 是一个抽象class,我假设这个"default parameter set" 是由您正在使用的特定子class 决定的。您可能会尝试弄清楚 class 您的 KeyPairGenerator 对象到底是什么,然后查阅该对象的文档 class 以了解您可以在哪里设置其默认参数。

您的代码已经足够了,指定 "secp256k1" 已经设置了正确的大小。 initialize(int, SecureRandom) 方法是 替代方法 initialize(AlgorithmParameterSpec, SecureRandom);你打电话给一个或另一个,而不是两个。如果您调用指定密钥大小的函数(例如 256),BC 提供程序将尝试选择正确大小的默认曲线(对于 256,它将是 "prime256v1" a.k.a。"P-256" 或 "secp256r1").