как я могу жестко закодировать закрытый ключ в конструкторе bitcoinJ - ECKey?

Может кто-нибудь объяснить, как использовать следующий конструктор (перечисленный здесь ):

ECKey(BigInteger priv, org.spongycastle.math.ec.ECPoint pub) 

Скажем, мой закрытый ключ: priv = "L4...5".

  1. Как мне получить его большое целочисленное представление (другими словами, и если я правильно понял, есть ли функция для перехода от check58к biginteger?), и

  2. как насчет второго параметра?

Спасибо

Ответы (2)

Если все, что вам нужно, это получить ECKeyобъект для этого закрытого ключа, то у Bitcoinj есть DumpedPrivateKeyкласс как раз для такого случая.

import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.DumpedPrivateKey;
import org.bitcoinj.params.MainNetParams;

public class Example {

    public static void main(String[] args) {
        String priv = "L4...5";
        ECKey key = DumpedPrivateKey.fromBase58(MainNetParams.get(), priv).getKey();
    }

}

Если вы хотите ECKeyявно использовать конструктор, вы сможете получить нужный код отсюда:

https://github.com/bitcoinj/bitcoinj/blob/release-0.14/core/src/main/java/org/bitcoinj/core/DumpedPrivateKey.java#L70-L91


Что касается перечисленного вами конструктора, это защищенный конструктор, поэтому, вероятно, вы не захотите его использовать. В нем перечислены параметры закрытого ключа и открытого ключа. Закрытый ключ может быть нулевым, если ECKeyэкземпляр будет использоваться только для проверки подписей, а не для их фактического создания. Открытый ключ не должен быть нулевым, и он экономит время, поскольку не требует повторного вычисления открытого ключа, что является операцией с интенсивным использованием ЦП.

Обратите внимание, что большинство public ECKeyконструкторов устарели. Сейчас предпочтительным способом создания ECKeyобъектов является использование статических фабричных методов.

Спасибо большое, очень, очень большое... у меня все получилось...

Вы можете вызвать общедоступный статический метод класса ECKey, fromPrivate(byte[] privKeyBytes, логическое сжатие). По нему вычисляется публичный ключ (это медленно), либо сжатый, либо нет. Например.,

        String privateKey = "Your Private Key";
        byte[] b = privateKey.getBytes();
        ECKey key = ECKey.fromPrivate(b, true);

или

BigInteger privKey = Base58.decodeToBigInteger(privateKey );
key = ECKey.fromPrivate(privKey);

https://bitcoinj.github.io/javadoc/0.13/org/bitcoinj/core/ECKey.html