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

准备工作 :

需要用到的加密: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

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

  1. 以太坊钱包Geth使用命令

    一.启动以太坊钱包Geth 打开一个控制台,执行同步区块命令 #同步测试链geth --fast --cache=512 --rpc --rpcapi personal,db,eth,net,web3 ...

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

    今天就来开发一个C# 版的简易钱包 先回顾以前的内容 c#实战开发:以太坊Geth 命令发布智能合约 (五) c#实战开发:以太坊Geth 常用命令 (四) c#实战开发:以太坊钱包快速同步区块和钱包 ...

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

    很多朋友不清楚如何转账ddw,但是万能的网友是无敌的,这两天就自己摸索的一点经验总结下今天的转账经验. 1. 提取到自己的账户 这个大家都知道如何操作,使用官方的钱包 在“日日盈app”中点击&quo ...

  4. [币严区块链]数字货币交易所之以太坊(ETH)钱包对接(四) 使用web3j对接以太坊钱包

    本文给大家介绍了 Web3j Java 版本的框架的基本使用,大家可根据本文的内容进行扩展性的练习,对其他 API 的使用进行尝试. 使用web3j对接以太坊钱包 一.开发准备事项 启动 Geth 此 ...

  5. PPT分享 | 以太坊钱包分析与介绍

    艾伯特AI人工智能(公众号:aibbtcom)按: (编者按:本文为姗姗来迟的Meetup系列推文.12月3日,林修平在亚太区以太坊社区培训与交流Meetup深圳站上跟我们分享了他对以太坊各种钱包模式 ...

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

    以太坊去中心化网页钱包开发系列,将从零开始开发出一个可以实际使用的钱包,本系列文章是理论与实战相结合,一共有四篇:创建钱包账号.账号Keystore文件导入导出.展示钱包信息及发起签名交易.发送Tok ...

  7. nodejs 使用 ethers创建以太坊钱包

    创建钱包创建钱包流程: 生成随机助记词 => 通过助记词创建钱包=>钱包信息和加密明文(私钥和密码加密) 导入钱包通过插件提供方法,根据助记词|keyStore|私钥,找到钱包信息(地址和 ...

  8. 以太坊钱包开发系列4 - 发送Token(代币)

    以太坊去中心化网页钱包开发系列,将从零开始开发出一个可以实际使用的钱包,本系列文章是理论与实战相结合,一共有四篇:创建钱包账号.账号Keystore文件导入导出.展示钱包信息及发起签名交易.发送Tok ...

  9. 什么是以太坊私钥储存(Keystore)文件

    进入keystore管理以太坊私钥的障碍很大,主要是因为以太坊客户端在直接的命令行或图形界面下隐藏了大部分的密码复杂性. 例如,用geth: $ geth account new Your new a ...

随机推荐

  1. maven子项目的springboot配置

    正常来说一个maven子项目的parent是父项目,而不是直接继承,这时候就需要改下配置 默认生成的代码入下: <?xml version="1.0" encoding=&q ...

  2. mui+回复弹出软键盘

    最近再做一个APP的时候,有一个评论回复的功能,在做APP的时候,直接用手指触发focus事件,来唤醒软键盘的弹出没有问题, 但是现在的功能需要对点击回复进行弹出软键盘来操作,参考过很多都有问题,后来 ...

  3. 序列化模块和sys模块

    sys模块 sys模块是与python解释器交互的一个接口 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys. ...

  4. python3 的 mysql 简单操作

    一.python 提供的 db 接口 pymysql 两个基本对象: connection.cursor 连接示例 # connect_demo.py import pymysql db = pymy ...

  5. 阿里云服务器 通过JavaMail发送邮箱STMP问题 25端口被禁用 使用SSL协议465端口

    1 问题描述 我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JD ...

  6. Caused by: java.sql.BatchUpdateException

    Caused by: java.sql.BatchUpdateException: Table (%s) has been dropped, altered or renamed.解决方法重启项目

  7. TOP100summit2017:豆瓣耿新跃---站在公司整体目标下看技术管理

    壹佰案例:耿新跃老师您好,很荣幸又一次邀请到您担任壹佰案例大会的联席主席,在去年的壹佰案例大会上,您给我们带来很多非常经典的案例点评和提炼.您在去年壹佰案例峰会上最大的感触是什么呢? 耿新跃:我个人最 ...

  8. Vue SSR配合Java的Javascript引擎j2v8实现服务端渲染1概述

    原文地址 http://www.terwergreen.com/post/vue-ssr-j2v8-1.html 初步实现方案探索(Node环境) // 第 1 步:创建一个 Vue 实例 const ...

  9. day2:day1作业 字符编码

    1,使用while循环输出1,2,3,4,5,6,8,9 # 使用while循环输出1,2,3,4,5,6,8,9 num = 1 while num <= 10: if num != 7: p ...

  10. 这就是使用ReportBuilder最简单的例子

    用这组控件最简单的例子:在窗体上放上组件名为ppBDEPipeline1,ppReport1,ppDesigner1,ppViewer1,DataSource1的控件,设置ppreport1的data ...