小编And*_*rew的帖子

仅使用公钥在 HD 钱包中生成以太坊地址 (bitcoinj/web3j)

我尝试为使用 bitcoinj 库实现的 HD 钱包密钥生成以太坊地址,但我感到困惑:

DeterministicSeed seed = new DeterministicSeed("some seed code here", null, "", 1409478661L);
DeterministicKeyChain chain = DeterministicKeyChain.builder().seed(seed).build();
DeterministicKey addrKey = chain.getKeyByPath(HDUtils.parsePath("M/44H/60H/0H/0/0"), true);
System.out.println("address from pub=" + Keys.getAddress(Sign.publicKeyFromPrivate(addrKey.getPrivKey())));
Run Code Online (Sandbox Code Playgroud)

此代码根据https://iancoleman.io/bip39/打印正确的以太坊地址。这里一切都很好。

但是,当我尝试避免使用私钥并使用公钥生成非强化密钥时,我只会得到不同的结果,即调用返回另一个结果:

System.out.println("address from pub=" + Keys.getAddress(addrKey.getPublicKeyAsHex()));
Run Code Online (Sandbox Code Playgroud)

看起来问题出在“不同的公钥”上,即Sign.publicKeyFromPrivate(addrKey.getPrivKey())和 的结果addrKey.getPublicKeyAsHex()是不同的。我对密码学没有经验,因此这可能是一个愚蠢的问题......但我会很感激这里的任何建议。

java cryptography bitcoinj ethereum web3-java

8
推荐指数
1
解决办法
2980
查看次数

标签 统计

bitcoinj ×1

cryptography ×1

ethereum ×1

java ×1

web3-java ×1