Skip to content
java
import org.web3j.crypto.Bip32ECKeyPair;
import org.web3j.crypto.ECKeyPair;
import org.web3j.crypto.Keys;
import org.web3j.crypto.MnemonicUtils;
import org.web3j.utils.Numeric;

public class MnemonicToPrivateKey {
    
    public static void main(String[] args) {
        // 示例助记词(mnemonic)
        String mnemonic = "pistol kiwi lava parrot bicycle curious talent pitch exile risk merit rare";
        String password = ""; // BIP39 允许可选的 passphrase,默认为空字符串

        // 1. 通过助记词生成种子
        byte[] seed = MnemonicUtils.generateSeed(mnemonic, password);

        // 2. 通过种子创建 HD 钱包主私钥
        Bip32ECKeyPair masterKeyPair = Bip32ECKeyPair.generateKeyPair(seed);

        // 3. 使用 BIP44 标准路径:m/44'/60'/0'/0/0(Ethereum 默认路径)
        int[] derivationPath = {44 | Bip32ECKeyPair.HARDENED_BIT, 60 | Bip32ECKeyPair.HARDENED_BIT, 0 | Bip32ECKeyPair.HARDENED_BIT, 0, 0};
        Bip32ECKeyPair derivedKeyPair = Bip32ECKeyPair.deriveKeyPair(masterKeyPair, derivationPath);

        // 4. 获取私钥
        String privateKeyHex = Numeric.toHexStringNoPrefix(derivedKeyPair.getPrivateKey());
        System.out.println("私钥: " + privateKeyHex);

        // 5. 生成钱包地址
        ECKeyPair ecKeyPair = ECKeyPair.create(derivedKeyPair.getPrivateKey());
        String address = "0x" + Keys.getAddress(ecKeyPair);
        System.out.println("钱包地址: " + address);
    }
    
}