[币严BIZZAN区块链]Java生成ETH钱包助记词、私钥、地址

本文主要介绍在Java工程中如何生成ETH钱包的助记词、私钥、地址。

一、在之前创建的spring boot 项目中的 pom.xml文件中加入需要的依赖

<dependency>
    <groupId>org.bitcoinj</groupId>
    <artifactId>bitcoinj-core</artifactId>
    <version>0.14.7</version>
</dependency>

<dependency>
    <groupId>org.web3j</groupId>
    <artifactId>core</artifactId>
    <version>3.6.0</version>
</dependency>

二、创建一个Wallet.java类

1、定义一个path路径常量

    /**
     * path路径
     */
    private final static ImmutableList<ChildNumber> BIP44_ETH_ACCOUNT_ZERO_PATH =
            ImmutableList.of(new ChildNumber(44, true), new ChildNumber(60, true),
                    ChildNumber.ZERO_HARDENED, ChildNumber.ZERO);

2、创建一个 createWallet 方法体

/**
     * 创建钱包
     * @throws MnemonicException.MnemonicLengthException
     */
    private static void createWallet()  throws MnemonicException.MnemonicLengthException {
        SecureRandom secureRandom = new SecureRandom();
        byte[] entropy = new byte[DeterministicSeed.DEFAULT_SEED_ENTROPY_BITS / 8];
        secureRandom.nextBytes(entropy);

        //生成12位助记词
        List<String>  str = MnemonicCode.INSTANCE.toMnemonic(entropy);

        //使用助记词生成钱包种子
        byte[] seed = MnemonicCode.toSeed(str, "");
        DeterministicKey masterPrivateKey = HDKeyDerivation.createMasterPrivateKey(seed);
        DeterministicHierarchy deterministicHierarchy = new DeterministicHierarchy(masterPrivateKey);
        DeterministicKey deterministicKey = deterministicHierarchy
                .deriveChild(BIP44_ETH_ACCOUNT_ZERO_PATH, false, true, new ChildNumber(0));
        byte[] bytes = deterministicKey.getPrivKeyBytes();
        ECKeyPair keyPair = ECKeyPair.create(bytes);
        //通过公钥生成钱包地址
        String address = Keys.getAddress(keyPair.getPublicKey());

        System.out.println();
        System.out.println("助记词:");
        System.out.println(str);
        System.out.println();
        System.out.println("地址:");
        System.out.println("0x"+address);
        System.out.println();
        System.out.println("私钥:");
        System.out.println("0x"+keyPair.getPrivateKey().toString(16));
        System.out.println();
        System.out.println("公钥:");
        System.out.println(keyPair.getPublicKey().toString(16));
    }

3、写一个main方法调用  createWallet 方法。

  public static void main(String[] args) throws Exception {
        //创建钱包
        createWallet();
    }

4、执行main方法 查看输出的钱包信息

助记词:
[usage, universe, dress, client, gold, wealth, short, diet, tourist, leave, roof, conduct]

地址:
0x1f3220b4651503bfe53bb96997fa547c4bc0fdaa

私钥:
0xa91f672a0c2094d20f3beeb4f47e2ce6c356e9081c74d7e3cd261f1bdc279a0b

公钥:
462aa97d90c49eaa4ec98c44a64c44606049be5d168c5461c8ed49762fa130d7b3201b336bac26e871c04f5aa84a0d0c868ffd0e04ad2b11d01561d6bb99eb1

5、验证

将上述生成的私钥或助记词在任意支持ETH的钱包中导入,可以看到地址与我们生成的一致,至此说明成功!

附:

完整代码

package com.bizzan.test;

import java.security.SecureRandom;
import java.util.List;

import org.bitcoinj.crypto.ChildNumber;
import org.bitcoinj.crypto.DeterministicHierarchy;
import org.bitcoinj.crypto.DeterministicKey;
import org.bitcoinj.crypto.HDKeyDerivation;
import org.bitcoinj.crypto.MnemonicCode;
import org.bitcoinj.crypto.MnemonicException;
import org.bitcoinj.wallet.DeterministicSeed;
import org.web3j.crypto.ECKeyPair;
import org.web3j.crypto.Keys;

import com.google.common.collect.ImmutableList;

public class Wallet {
    /**
     * path路径
     */
    private final static ImmutableList<ChildNumber> BIP44_ETH_ACCOUNT_ZERO_PATH =
            ImmutableList.of(new ChildNumber(44, true), new ChildNumber(60, true),
                    ChildNumber.ZERO_HARDENED, ChildNumber.ZERO);

    public static void main(String[] args) throws Exception {
        //创建钱包
        createWallet();
    }

    /**
     * 创建钱包
     * @throws MnemonicException.MnemonicLengthException
     */
    private static void createWallet()  throws MnemonicException.MnemonicLengthException {
        SecureRandom secureRandom = new SecureRandom();
        byte[] entropy = new byte[DeterministicSeed.DEFAULT_SEED_ENTROPY_BITS / 8];
        secureRandom.nextBytes(entropy);

        //生成12位助记词
        List<String>  str = MnemonicCode.INSTANCE.toMnemonic(entropy);

        //使用助记词生成钱包种子
        byte[] seed = MnemonicCode.toSeed(str, "");
        DeterministicKey masterPrivateKey = HDKeyDerivation.createMasterPrivateKey(seed);
        DeterministicHierarchy deterministicHierarchy = new DeterministicHierarchy(masterPrivateKey);
        DeterministicKey deterministicKey = deterministicHierarchy
                .deriveChild(BIP44_ETH_ACCOUNT_ZERO_PATH, false, true, new ChildNumber(0));
        byte[] bytes = deterministicKey.getPrivKeyBytes();
        ECKeyPair keyPair = ECKeyPair.create(bytes);
        //通过公钥生成钱包地址
        String address = Keys.getAddress(keyPair.getPublicKey());

        System.out.println();
        System.out.println("助记词:");
        System.out.println(str);
        System.out.println();
        System.out.println("地址:");
        System.out.println("0x"+address);
        System.out.println();
        System.out.println("私钥:");
        System.out.println("0x"+keyPair.getPrivateKey().toString(16));
        System.out.println();
        System.out.println("公钥:");
        System.out.println(keyPair.getPublicKey().toString(16));
    }

}

币严(BIZZAN.COM)数字货币交易平台官方网址:

https://www.bizzan.com

原文地址:https://www.cnblogs.com/bizzan/p/11748807.html

时间: 2024-10-07 12:30:43

[币严BIZZAN区块链]Java生成ETH钱包助记词、私钥、地址的相关文章

1.16. BIP39协议:使用助记词生成确定性钱包

以太坊系统学习教程: https://www.netkiller.cn/blockchain/bip39.html BIP:39 层:应用层 标题:使用助记词生成确定性钱包秘钥 作者:Marek Palatinus [email protected] Pavol Rusnak [email protected] Aaron Voisine [email protected] Sean Bowe [email protected] 状态:已经被提议 类型:标准化跟踪 创建日期:2013-09-10

BIP39助记词生成简单流程

其实,bip39之前有过一些了解,但是都没有过深入的探索,最近具体学习下,顺便记录下: 1.首先,随机生成一个长度为32倍数的128-256位的二进制类型,我们把它称之为熵: 2.对这个生成的熵做sha256计算,取结果的前8位:(这里说明下,虽然取了8位,但是不一定全部用上,具体使用的位数计算:n = 熵的位数/32) 3.用熵与上一步中前n位进行拼接(熵放前),获得一个大整型(我们一般称这n位为校验位): 这里也说明下,之前我看到网上有人说是将熵以32位分割,然后每段末尾插入1个校验位,于是

程序员的自我救赎---12.2.1: 虚拟币交易平台(区块链) 上【发行区块链代币】

<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八)监控系统 (九)会员中心 (十) APP版本控制系统 (十一)Winner前端框架与RPC接口规范讲解 (十二)上层应用案例 (十三)总结 <虚拟币交易平台(区块链)> --上 [发行区块链代币] 关于对于区块链 或者 比特币还没有一个基础概念的就自行百度吧,什么"去中心化",

区块链多币种理财钱包APP软件开发

熊市囤币,牛市赚钱.这种情形之下,区块链多币种理财钱包就成为了新的火爆项目.公信宝在前不久推出了余币宝.OK也即将推出类似的产品. 币余宝详情 1.余币宝是一款全新的币币增值产品,背后是由数字货币资管集团Tokenmania Asset Management Corporation(简称 "TAMC")提供的低风险量化交易策略. 2.余币宝产品主要通过跨市场套利 .单市场做市 .跨市场做市等交易策略,通过完全对冲的方式,在相对较低风险下获得增值空间. 余币宝是币币增值产品,以加入100

区块链入门教程eth的账户和基本单位

我们在命令行输入 eth.accounts 可以看到当前该区块链中共有几个账号,以及每个账号的公钥地址. 在eth系统中,状态是由被称为"账户"(每个账户由一个20字节的地址)的对象和在两个账户之间转移价值和信息的状态转换构成的. eth的账户包含四个部分: 随机数,用于确定每笔交易只能被处理一次的计数器 账户目前的以太币余额 账户的合约代码,如果有的话 账户的存储(默认为空) 简单地说,每一个eth账户都有一对公钥和私钥组成. 公钥我们可以理解为就是账户地址,任何其他账户都可以访问该

兄弟连区块链入门教程eth源码分析RPC分析

这是一个交互式的 JavaScript 执行环境,在这里面可以执行 JavaScript 代码,其中 > 是命令提示符.在这个环境里也内置了一些用来操作eth的 JavaScript 对象,可以直接使用这些对象.这些对象主要包括: eth:包含一些跟操作区块链相关的方法:net:包含一些查看p2p网络状态的方法:admin:包含一些与管理节点相关的方法:miner:包含启动&停止挖矿的一些方法:personal:主要包含一些管理账户的方法:txpool:包含一些查看交易内存池的方法:web3

区块链技术--区块链的生成和链接

1.区块的生成 (1)矿工在挖矿前要组建区块,将coinbase交易打包进区块 (2)将交易池中高优先级的交易打包进区块 优先级=交易的额度 * UTXO的深度/交易的size (3) 创建区块的头部[版本号,父区块哈希,Merkle树根,时间戳,难度值,Nonce] (4) 挖矿成功后,将计算出来的随机数nonce填入到区块头部,向邻近节点传播 2.区块的验证链接 (1)相邻节点收到新区块后,会立即验证这个区块 3.Merkle Tree结构 (1)防止数据篡改 (2)快速验证某个交易是否存在

区块链交易钱包软件开发

区块链交易钱包随着国内区块链数字资产交易平台的逐步完善,区块链钱包的使用会越来越频繁和重要,在使用区块链钱包时,有几个名词必须深刻理解,不然就有可能造成区块链资产的损失,这几个名词为私钥.助记词.keystore.地址.密码.若以银行账户为类比,这 5 个词分别对应内容如下:私钥=银行卡号+银行卡密码助记词=银行卡号+银行卡密码Keystore+密码=银行卡号+银行卡密码Keystore ≠ 银行卡号地址=银行卡号密码=银行卡密码一.地址地址=银行卡号//系统开发:181-2797-3417.生

第6讲 | 理解区块链之前,先上手体验一把数字货币

初次接触到区块链的你,肯定是一头雾水:“区块链是什么,这玩意到底怎么回事”. 其实对于区块链的原理,你大可不必着急,咱们可以直接上手体验一下目前区块链的第一大应用:数字货币. 本篇的内容面向所有区块链的小白,我会教你如何使用数字货币,来帮你从另外一个维度理解区块链技术. 本篇内容包括但不限于:数字货币钱包介绍.下载安装.转账.数字货币交易所充币.提币等等. 首次接触数字货币 区块链其实是从生产者的角度讨论一个抽象出来的概念.如果把区块链比作车辆设计图纸,那么数字货币就是正在跑的汽车.所以理解区块