2019独角兽企业重金招聘Python工程师标准>>>

HD钱包其实就是管理一堆的Seed以及密钥。记住32byte的私钥是个反人性的事。所以,就有了助记词(Mnemonics)。本文讨论由助记词(Mnemonics)生成种子, and vice versa.

首先,借用Mastering Bitcoin书里的几张图,说明一下HD钱包

下面是变换框图

图片借用到此为止,下面是捋代码

如何生成初始的熵(entropy)

func NewEntropy(bitSize int) ([]byte, error) {err := validateEntropyBitSize(bitSize)if err != nil {return nil, err}entropy := make([]byte, bitSize/8)_, err = rand.Read(entropy)return entropy, err
}

validateEntropyBitsize : bitSize只能是128,256,512。一定是8的倍数

如何生成checksum

func addChecksum(data []byte) []byte {// Get first byte of sha256hasher := sha256.New()hasher.Write(data)hash := hasher.Sum(nil)firstChecksumByte := hash[0]// len() is in bytes so we divide by 4checksumBitLength := uint(len(data) / 4)// For each bit of check sum we want we shift the data one the left// and then set the (new) right most bit equal to checksum bit at that index// staring from the leftdataBigInt := new(big.Int).SetBytes(data)for i := uint(0); i < checksumBitLength; i++ {// Bitshift 1 leftdataBigInt.Mul(dataBigInt, bigTwo)// Set rightmost bit if leftmost checksum bit is setif uint8(firstChecksumByte&(1<<(7-i))) > 0 {dataBigInt.Or(dataBigInt, bigOne)}}return dataBigInt.Bytes()
}

剩下把bits分成12个segment,然后查字典,就不用说了吧

字典在此

测试向量在此

在此处验证

转载于:https://my.oschina.net/gavinzheng731/blog/1847838

助记词(Mnemonics)生成种子,以及Public Key, Private key相关推荐

  1. java助记词_JAVA生成BTC地址以及私钥,公钥和助记词

    JAVA生成BTC地址以及私钥,公钥和助记词 有用的话,回来给我点个赞,谢谢了.有问题留言,我会尽快回复. maven依赖 org.bitcoinj bitcoinj-core 0.14.7 上代码 ...

  2. 钱包原理——助记词与公私钥

    目前钱包分为两种: 一种是非确定性(随机)的钱包,就是随机生成多个私钥,钱包管理这些私钥.如果需要成千上万的地址,通过随机的方式来生成私钥,这就需要存储那么多无规律的私钥,这样就很麻烦不好管理. 另一 ...

  3. java助记词反向_GitHub - gangan1345/mnemonic-sdk: Mnemonic bip39 bip32 bip44 生成助记词 私钥...

    mnemonic-sdk Mnemonic bip39 bip32 bip44 支持 BIP39 助记词 支持 BIP32 子私钥 支持 BIP44 多币种管理 Install Gradle: Add ...

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

    以太坊系统学习教程: https://www.netkiller.cn/blockchain/bip39.html 1.16. BIP39协议:使用助记词生成确定性钱包 BIP:39 层:应用层 标题 ...

  5. bip39:使用bip39生成助记词

    助记词 从HD钱包的创建方式可知,要创建一个HD钱包,我们必须首先有一个确定的512bit(64字节)的随机数种子. 如果用电脑生成一个64字节的随机数作为种子当然是可以的,但是恐怕谁也记不住. 如果 ...

  6. 第17篇 账户管理(助记词)

    本文环境: 操作系统:windows 64: node版本:v10.14.0: 参考文档:https://github.com/guoshijiang/blockchain-wallet/tree/m ...

  7. php实现助记词转TRX,ETH 私钥和钱包地址

    TRX助记词转地址网上都是Java,js或其他语言开发的示例,一个简单的功能需要依赖其他环境来实现表示不能忍,毕竟php是世界上最好的语言.[狗头] 一.知识准备 要实现助记词转TRX私钥和地址,先需 ...

  8. 助记词是什么,有什么用?

    玩加密货币的朋友相信对助记词都不陌生,我们在使用钱包之前,会让你备份12个单词,在备份期间不允许截图操作,并且不断强调这12个单词非常重要,最好用物理方式备份,备份时身边不要有任何人. 对于普通用户来 ...

  9. MOAC区块链助记词

    1.什么是助记词 拥有数字货币资产的人都知道,私钥的备份是非常重要的,有私钥就拥有该私钥对应账户上的所有资产.一般来说私钥都有 256 位,以 64 个字母数字构成的 16 进制字符串表示.直接抄录这 ...

  10. web3通过助记词获取所有关联的账号:公钥、私钥、地址

    1. 业务逻辑 需要使用bip39协议将助记词转换成种子,再通过ethereumjs-wallet库生成hd钱包,根据路径的不同从hd钱包中获取不同的keypair,keypair中就包含有公钥.私钥 ...

最新文章

  1. 万字讲解API网关的来龙去脉
  2. 【Redis】新浪微博与微信Redis架构实战 - 笔记
  3. HTML5 新元素标签系列:最简版 HTML5
  4. c++ 虚函数的实现机制
  5. MATLAB使用imshow之后plot的坐标原点在左上角!
  6. 2017.9.27 青蛙的约会 失败总结
  7. centos6+ 将程序 注册到 service进行启动 停止 重启等:以nginx为例,添加nginx脚本
  8. jsp 页面刷新,EasyUI刷新、加载
  9. html5 json.stringify,JSON.stringify()妙用
  10. 绘制qq群的基础用例图_首次绘制出“氟化氢”地图:间接实现追踪宇宙中最常见的分子氢!...
  11. P2123皇后游戏+P1080国王游戏
  12. entity、bo、vo、po、dto、pojo如何理解及相互转化
  13. python编辑器windows_【python】windows下好用的的python编辑器 pyScripter
  14. java去掉转义字符,双引号,全角空格
  15. Android平台以WebView方式集成H5+SDK和支付宝登录授权插件开发思路总结
  16. 手动标记用例状态_别再用「六个点」当省略号了,这些标点都有更规范的输入方式...
  17. 基于微信小程序的同城家政服务小程序
  18. 《自然语言处理实战入门》第三章 :中文分词原理及相关组件简介---- 汉语分词领域主要分词算法、组件、服务(下)
  19. android 画图 平面图,房屋平面图 DIY 神工具!「MagicPlan」用手机拍照就自动帮你画好(iPhone, Android)...
  20. 5码默认版块_短说社区论坛系统版块权限功能

热门文章

  1. 机场部队都在用的无人机干扰设备----- TFN MR09
  2. Markdown基础总结
  3. Elementui蓝色阴影边框相关问题的解决方案
  4. 2008年8月7号,晴,热了。一寸光阴一寸金,寸金难买寸光阴。——《增广贤文》
  5. iOS 打开第三方应用
  6. 【从零开始学习 UVM】6.4、UVM 激励产生 —— uvm_do 宏详解
  7. 自相关系数、偏自相关系数理解
  8. 第1关:学会使用 Gensim
  9. android新闻客户端答辩,头条客户端 Android
  10. 【echarts应用】---pie饼图篇