Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | Github | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏多维度架构

11.16. 助记词

11.16.1. 获取随机助记词

			
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
			
			

11.16.2. 助记词导出公钥和私钥

			
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