Java 120 символов ECDSA publi c ключ к 130 символам или Ethereum адресу - PullRequest
0 голосов
/ 05 мая 2020

Мне дается 120-символьный ключ X509 publi c, созданный ECDSA, внешней системой. Теперь я хочу использовать его в Ethereum, преобразовав его в адрес.

(не настоящий ключ, а пример содержимого (120 символов)) MFYwEAYHKoZIzj0CAQYFK4EE123456789n9DSxZh3wfq0BIL5LDF5B54e07bxFiKc89K/GaKj4qrGC/Mb/KnakQBrN4khMQHLnxm7TjaxXQPxtJMV5b+A==

Я не вижу простого способа сделать это с помощью web3j, возможно, есть другой способ? Я думаю, глядя на тесты, org.web3j.crypto.Keys.getAddress(String) ожидает шестнадцатеричную версию из 130 символов.

Как мне преобразовать 120 символов в 130 символов шестнадцатеричное представление в позвольте мне вызвать метод getAddress или, может быть, есть прямой способ преобразовать 120-символьный ключ pub в Ethereum адрес?

1 Ответ

2 голосов
/ 05 мая 2020

Если у вас был действующий ключ publi c SECP-256k1 в кодировке Base64, следующий код позволил бы вам получить адрес Ethereum с помощью Web3j.

String encodedKey = "MFYwEAYHKoZIzj0CAQYFK4EE123456789n9DSxZh3wfq0BIL5LDF5B54e07bxFiKc89K/GaKj4qrGC/Mb/KnakQBrN4khMQHLnxm7TjaxXQPxtJMV5b+A==";
byte[] decoded = Base64.getDecoder().decode(encodedKey);
String address = Keys.getAddress(Numeric.toHexString(decoded));

Однако, как указано в комментарии, похоже, что входной закодированный ключ - это не 128-битный ключ publi c, а сертификат X.509. Следовательно, вам нужно будет сделать что-то в этом роде:

String encodedKey = "MFYwEAYHKoZIzj0CAQYFK4EE123456789n9DSxZh3wfq0BIL5LDF5B54e07bxFiKc89K/GaKj4qrGC/Mb/KnakQBrN4khMQHLnxm7TjaxXQPxtJMV5b+A==";

byte[] decoded = Base64.getDecoder().decode(encodedKey);

CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
Certificate cert = certFactory.generateCertificate(new ByteArrayInputStream(decoded));

// TODO: Figure out how to convert this PublicKey into a byte array or BigInteger
byte[] publicKey = cert.getPublicKey();

String address = Keys.getAddress(Hex.toHexString(publicKey));

Также стоит упомянуть, что инструмент командной строки OpenSSL также может быть очень полезен для преобразования сертификатов в разные форматы.

...