(转)以太坊 钱包 创建 导入 Keystore

最近闲来无事 研究了下以太坊钱包 下边分享下

准备工作 :

需要用到的加密:BIP32 BIP39 BIP44 SCRYPT

加密算法 githab地址

https://github.com/NovaCrypto/BIP32

https://github.com/NovaCrypto/BIP39

https://github.com/NovaCrypto/BIP44

https://github.com/wg/scrypt/

官方依赖

https://github.com/web3j/web3j

钱包创建

1,生成一个随机的助记词   

  StringBuilder sb = new StringBuilder();
    byte[] entropy = new byte[Words.TWELVE.byteLength()];
    new SecureRandom().nextBytes(entropy);
    new MnemonicGenerator(English.INSTANCE)
    .createMnemonic(entropy, sb::append);
    System.out.println(sb.toString());

2,根据助记词生成一个种子 (前两步参考BIP39)

 byte[] seed = new SeedCalculator()
                     .withWordsFromWordList(English.INSTANCE)
                     .calculateSeed(mnemonicWordsInAList(助记词List), passphrase);

3 ,根据种子生成公私钥 (web3j)//如果还需要对接比特币等等其他币种 请去查看 BIP44 与BIP32 之前写的是BIT44与32的 但是挺麻烦

    ECKeyPair ecKeyPair= ECKeyPair.create(sha256(seed));

输出16进制go

     ecKeyPair.getPrivateKey().toString(16)

     ecKeyPair.getPublicKey().toString(16)

4,根据公钥 私钥 密码 得到 keystore (参考web3j)

WalletFile walletFile = Wallet.create("钱包密码", ecKeyPair,n,p);

walletFile即钱包的keystore的实体 转化成string 就是 keystore

钱包地址=walletFile.getAddress();

到此整个钱包就生成完毕了 我们得到了 公钥 私钥 地址 keystore

钱包导入

私钥导入

ECKeyPair.create(new BigInteger(mPrivateKey,16));

助记词导入

通过助记词得到种子 然后再得到公私钥  看2-3步

Keystore导入

调用web3j中提供的方法

Wallet.decrypt("密码", WalletFile );

就这些 以太坊的钱包就完成了

我在项目中 WalletFile walletFile = Wallet.create("钱包密码", ecKeyPair,n,p);这一步出OOM了

然后就放弃了wen3j提供的方法 自己重新封装了一套 当然大部分还是借鉴的web3j的

嘿嘿,上边所有的方法其实都是别人已经封装好的 我只是把他们梳理了一下 方便下后人

我自己重新封装的部分就不贴了

转自:https://blog.csdn.net/u010123087/article/details/79608939

原文地址:https://www.cnblogs.com/zhangmingcheng/p/9166818.html

时间: 2024-10-05 00:09:48

(转)以太坊 钱包 创建 导入 Keystore的相关文章

登链钱包(一款功能强大的以太坊钱包)完全开源

你是否和我前段时间一样,苦苦的寻找一款好用的开源以太坊钱包,你会发现可用都很少,因为很多钱包说开源,仅仅是开源部分代码,现在不需要再找了, 登链钱包完全开源,登链钱包完全开源,登链钱包完全开源,重要的事情说三遍. 再也不用傻乎乎找人开发以太坊钱包了, 直接拿去用吧:再也不用担心私钥会被上传到别人的服务器上. <!-- more --> 写在前面 区块链是开放的,很难想象一个封闭的项目如何产生信任,开源一直是区块链社区所倡导的行为准则. 我们也希望开源能够降低行业的开发门槛,吸引更多的开发者和公

牛奶ddw如何通过以太坊钱包实现互相打赏

很多朋友不清楚如何转账ddw,但是万能的网友是无敌的先就自己摸索的一点经验总结下今天的转账经验. 1. 提取到自己的账户 这个大家都知道如何操作,使用官方的钱包 在“日日盈app”中点击"我的设备”,点击提取收益,如果顺利币会瞬间提取到你的主账户钱包中 如果失了(查看账户余额不为0则失败),稍后使用4G或者其他网络再次尝试,多次尝试后即可 2. 如何互相转账 2.1 请下载网友提供的以太坊万能钱包:http://ox0ubbr6d.bkt.clouddn.com/Ethereum-Wallet-

c#实战开发:用.net core开发一个简单的Web以太坊钱包 (六)

今天就来开发一个C# 版的简易钱包 先回顾以前的内容 c#实战开发:以太坊Geth 命令发布智能合约 (五) c#实战开发:以太坊Geth 常用命令 (四) c#实战开发:以太坊钱包快速同步区块和钱包卡死解决方案 (三) c#实战开发:以太坊钱包对接私链 (二) c#实战开发:以太坊私链搭建(一) 先看一下可视化钱包有哪些功能呢? 那这个钱包得有什么功能呢? 1.查看用户 2.查看交易记录 3.转账 4.发布智能合约 5.代币转账 6.代币查询 7.实时同步区块对比 8.智能填写手续费 首先新建

Android开发以太坊钱包生成应用程序

Android应用程序以太坊钱包生成,要做的工作不少,不过如果我们一步一步来应该也比较清楚: 1.在app/build.gradle中集成以下依赖项: compile ('org.web3j:core-android:2.2.1') web3j核心是用于从服务器下载以太坊区块链数据的核心类库.它通常用于以太坊开发. 2.我们将设计一个Android UI示例,屏幕上将有文本编辑和按钮.在EditText中,将要求用户输入钱包的密码.然后在按钮的单击事件上,我们将开始发送密码的过程.以下是layo

以太坊钱包开发系列2 - 账号Keystore文件导入导出

以太坊去中心化网页钱包开发系列,将从零开始开发出一个可以实际使用的钱包,本系列文章是理论与实战相结合,一共有四篇:创建钱包账号.账号Keystore文件导入导出.展示钱包信息及发起签名交易.发送Token(代币),这是第二篇,主要介绍钱包账号导出与导入,将对Keystore文件的生成的原理进行介绍. 如何导入Geth创建的账号? 在上一篇文章,介绍了如何使用私钥及助记词来创建账号,如果是使用已有的私钥及助记词,这其实也是账号导入的过程. 有一些同学会问,我的账号是Geth生成的,如何导入到钱包呢

以太坊钱包搭建与使用

前言 本文使用系统:centos7. 以太坊客户端:geth 安装 下载geth: 官方下载地址:https://geth.ethereum.org/downloads 直接下载: wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.9.6-bd059680.tar.gz 解压 tar zxvf geth-linux-amd64-1.9.6-bd059680.tar.gz cd geth-linux-amd

如何开发一款以太坊(安卓)钱包系列1 - 通过助记词创建账号

上周我开源了一款钱包,反映很好,一周时间不到已经快到100 Star.接下来我会几篇系列文章把开发以太坊钱包的核心要点写出来,也算是对代码的一个解读. 写在前面 钱包是使用Android安卓平台编写,使用的是原生代码Java 语言编写, 是基于Java 1.8 版本,也使用了Java 1.8 中一些较新的语言特性,如 Lambda表达式等:另外还较多使用了ReactiveX/RxAndroid响应式编程用法. 在本系列文章中,重点是介绍以太坊钱包账号.交易等逻辑,有时可能会假定读者已经了解And

科普贴 | 以太坊代币钱包MyEtherWallet使用教程,一步步教你玩转MEW

MyEtherWallet 是一个以太坊的网页钱包,使用非常简单,打开网页就可以使用,源代码开源,不会在服务器上存储用户的钱包信息如私钥和密码.支持 Ledger Wallet.TREZOR 等硬件钱包,功能极为丰富.是一把我们经常会用到的瑞士军刀! Myetherwallet 支持符合 ERC20 标准的代币(即以太坊系代币). 官网:https://www.myetherwallet.com/ ,一定要认准网址. 创建钱包1. 打开官网,将页面切换为中文,设置一个钱包密码(不少于9位,一定要

[以太坊源代码分析] V. 从钱包到客户端

以太坊作为一种数字货币以太币的运行系统,显然它也会有类似于钱包的客户端程序,用来提供管理账户余额等功能.我们知道,存放(或者绑定,挂靠)以太币的账户,在代码中以Address类型变量存在,所以能够管理多个以太坊账户应该属于客户端程序基本功能之一.本文会从管理账户信息的代码包开始,自底向上的介绍以太坊客户端程序的一些主要模块.1. 管理账户信息的代码包accounts 在以太坊源代码的accounts代码包中,呈现账户地址的最小结构体叫Account{},它的主要成员就是一个common.Addr