在以太坊中将12个单词的助记符转换为私钥

时间:2019-04-30 13:07:00

标签: blockchain ethereum private-key mnemonics

我正在开发一个Android应用程序,用户可以在其中使用他们的以太坊帐户登录并进行交易。到目前为止,用户可以使用其私钥登录。我想添加使用12个助记词登录的选项。

我能够使用MnemonicUtils:https://github.com/web3j/web3j/blob/master/crypto/src/main/java/org/web3j/crypto/MnemonicUtils.java生成种子(助记符+密码短语)。但是如何从该种子生成帐户的私钥? 我已经尝试使用下面的代码,但是每次为完全相同的助记符生成一个不同的私钥。

String mnemonic="" //I put here my own mnemonic
ECKeyPair exKey= null;
        try {

               exKey = Keys.createEcKeyPair();
                } catch (InvalidAlgorithmParameterException e) {
                e.printStackTrace();
                } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
                } catch (NoSuchProviderException e) {
                e.printStackTrace();
                }

                WalletFile wallet=null;
                try {
                wallet = Wallet.createLight(mnemonic,exKey);
                } catch (CipherException e) {
                e.printStackTrace();
                }

                Credentials credentials = null;
                try {
                credentials = Credentials.create(Wallet.decrypt(mnemonic,wallet));
                } catch (CipherException e) {
                e.printStackTrace();
                }
String privateKeyGenerated = credentials.getEcKeyPair().getPrivateKey().toString(16);
                Log.d("PK", privateKeyGenerated);

1 个答案:

答案 0 :(得分:0)

来自https://github.com/web3j/web3j/blob/master/core/src/main/java/org/web3j/crypto/Bip44WalletUtils.java

这应该有效:

String mnemonic; // mnemonic

byte[] seed = MnemonicUtils.generateSeed(mnemonic, null);
Bip32ECKeyPair masterKeypair = Bip32ECKeyPair.generateKeyPair(seed);

// m/44'/60'/0'/0
final int[] path = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 0 | HARDENED_BIT, 0};
Bip32ECKeyPair bip44Keypair = Bip32ECKeyPair.deriveKeyPair(master, path);