知乎專欄 | 多維度架構 | | | 微信號 netkiller-ebook | | | QQ群:128659835 請註明“讀者” |
package cn.netkiller.ethereum.mnemonic; import java.io.IOException; import java.security.SecureRandom; import java.util.List; import org.bitcoinj.wallet.DeterministicSeed; import org.bitcoinj.wallet.UnreadableWalletException; public class MnemonicTest { public static void main(String[] args) throws UnreadableWalletException, IOException { // TODO Auto-generated method stub String passphrase = ""; SecureRandom secureRandom = new SecureRandom(); long creationTimeSeconds = System.currentTimeMillis() / 1000; DeterministicSeed deterministicSeed = new DeterministicSeed(secureRandom, 128, passphrase, creationTimeSeconds); List<String> mnemonicCode = deterministicSeed.getMnemonicCode(); System.out.println(String.join(" ", mnemonicCode)); } }
輸出
romance rhythm session oyster upgrade include hammer chimney float bridge autumn accident
package cn.netkiller.ethereum.mnemonic; import java.math.BigInteger; import java.util.List; import org.bitcoinj.crypto.ChildNumber; import org.bitcoinj.crypto.DeterministicKey; import org.bitcoinj.crypto.HDUtils; import org.bitcoinj.wallet.DeterministicKeyChain; import org.bitcoinj.wallet.DeterministicSeed; import org.bitcoinj.wallet.UnreadableWalletException; import org.web3j.crypto.Credentials; public class Test { public static void main(String[] args) throws UnreadableWalletException { // TODO Auto-generated method stub String seedCode = "client dune unfair assume level width bind control mad member old crystal"; // BitcoinJ DeterministicSeed seed = new DeterministicSeed(seedCode, null, "", 1409478661L); DeterministicKeyChain chain = DeterministicKeyChain.builder().seed(seed).build(); List<ChildNumber> keyPath = HDUtils.parsePath("M/44H/60H/0H/0/0"); DeterministicKey key = chain.getKeyByPath(keyPath, true); BigInteger privKey = key.getPrivKey(); // Web3j Credentials credentials = Credentials.create(privKey.toString(16)); String address = credentials.getAddress(); String privateKey = privKey.toString(16); System.out.println(address); System.out.println(privateKey); } }
輸出
0x372fda02e8a1eca513f2ee5901dc55b8b5dd7411 f592b7bf06ca9fd7696ba95d6ed8e357de6a2379b6d5fe1ffd53c6b4b063cd4a