2015-04-21 7 views
5

Obecnie, gdy tworzę klucz stosując następujące metodyJak utworzyć klucz ECDSA (256 bit) dla krzywej Bitcoin (secp256k1) używając gąbczastego zamku?

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 ma innego sposobu, w którym można określić rozmiar klucza, ale nie jestem pewien, jak będę przechodzić ecSpec wtedy.

public void initialize(int keysize, SecureRandom random) 
+0

używasz jakiejkolwiek biblioteki stron trzecich z tym kodem? – Bunny

+0

Tak, biblioteka spongycastle. – ua741

Odpowiedz

3

Twój kod jest już wystarczający, a wybranie "secp256k1" ustawia już prawidłowy rozmiar. Metoda initialize(int, SecureRandom) jest alternatywą do initialize(AlgorithmParameterSpec, SecureRandom); dzwonisz do jednego lub drugiego, nie do obu. Jeśli wywołasz ten, który określa klucz (powiedzmy 256), dostawca BC spróbuje wybrać krzywą domyślną o odpowiednim rozmiarze (dla 256 będzie to "prime256v1" a.k.a. "P-256" lub "secp256r1").

0

The documentation for KeyPairGenerator mówi, że robi to initialize(int, SecureRandom):

Inicjuje generator klucza pair dla pewnej rozmiar klucza z danego źródła losowości (i domyślny zestaw parametrów).

KeyPairGenerator jest klasą abstrakcyjną i zakładam, że ten "domyślny zestaw parametrów" jest określony przez określoną podklasę, której używasz. Możesz spróbować dowiedzieć się, jaka klasa naprawdę jest obiektem KeyPairGenerator, a następnie zapoznać się z dokumentacją tej klasy, aby dowiedzieć się, gdzie możesz ustawić jej domyślne parametry.

Powiązane problemy