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

时间:2015-04-21 17:09:40

标签: java android encryption bouncycastle ecdsa

目前,我正在使用此方法创建keyPair

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)

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

documentation for KeyPairGenerator表示initialize(int, SecureRandom)执行此操作:

  

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

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

相关问题