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

目前,当我使用以下方法创建密钥时

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,但我不确定如何通过ecSpec。

  public void initialize(int keysize, SecureRandom random) 

您的代码已经足够,指定“secp256k1”已经设置了正确的大小。 initialize(int, SecureRandom)方法是initialize(AlgorithmParameterSpec, SecureRandom)替代方法initialize(AlgorithmParameterSpec, SecureRandom) ; 你打电话给其中一个,而不是两个。 如果你调用指定keysize的那个(比如256),BC提供者将尝试选择正确大小的默认曲线(对于256,它将是“prime256v1”又名“P-256”或“secp256r1”)。

KeyPairGenerator的文档说initialize(int, SecureRandom)执行此操作:

使用给定的随机源(以及默认参数集)初始化特定密钥大小的密钥对生成器。

KeyPairGenerator是一个抽象类,我假设这个“默认参数集”由您正在使用的特定子类决定。 您可能会尝试找出KeyPairGenerator对象的实际类,然后查阅该类的文档以了解可以在何处设置其默认参数。