bip39:使用bip39生成助记词

助记词 从HD钱包的创建方式可知,要创建一个HD钱包,我们必须首先有一个确定的512bit(64字节)的随机数种子。 如果用电脑生成一个64字节的随机数作为种子当然是可以的,但是恐怕谁也记不住。 如果自己想一个句子,例如bitcoin is awesome,然后计算SHA-512获得这个64字节的种子,虽然是可行的,但是其安全性取决于自己想的句子到底有多随机。像bitcoin is awesome本质上就是3个英文单词构成的随机数,长度太短,所以安全性非常差。 为了解决初始化种子的易用性问题,BIP-39规范提出了一种通过助记词来推算种子的算法: 以英文单词为例,首先,挑选2048个常用的英文单词,构造一个数组: const words = ; 然后,生成128~256位随机数,注意随机数的总位数必须是32的倍数。例如,生成的256位随机数以16进制表示为: ********************339a722094e0fdbbbe0e96f148ae80924 在随机数末尾加上校验码,校验码取SHA-256的前若干位,并使得总位数凑成11的倍数,即。上述随机数校验码的二进制表示为00010000。 将随机数+校验码按每11 bit一组,得到范围是0~2047的24个整数,把这24个整数作为索引,就得到了最多24个助记词,例如: bleak version runway tell hour unfold donkey defy digital abuse glide please omit much cement sea sweet tenant demise taste emerge inject cause link 由于在生成助记词的过程中引入了校验码,所以,助记词如果弄错了,软件可以提示用户输入的助记词可能不对。 生成助记词的过程是计算机随机产生的,用户只要记住这些助记词,就可以根据助记词推算出HD钱包的种子。 注意:不要自己挑选助记词,原因一是随机性太差,二是缺少校验。 生成助记词可以使用bip39这个JavaScript库: const bip39 = require('bip39'); let words = bip39.generateMnemonic(256); console.log(words); console.log('is valid mnemonic? ' + bip39.validateMnemonic(words)); 运行上述代码,每次都会得到随机生成的不同的助记词。 如果想用中文作助记词也是可以的,给generateMnemonic()传入一个中文助记词数组即可: const bip39 = require('bip39'); // 第二个参数rng可以为null: var words = bip39.generateMnemonic(256, null, bip39.wordlists.chinese_simplified); console.log(words); 注意:同样索引的中文和英文生成的HD种子是不同的。各种语言的助记词定义在bip-0039-wordlists.md。 根据助记词推算种子 根据助记词推算种子的算法是PBKDF2,使用的哈希函数是Hmac-SHA512,其中,输入是助记词的UTF-8编码,并设置Key为mnemonic+用户口令,循环2048次,得到最终的64字节种子。上述助记词加上口令bitcoin得到的HD种子是: ********************cd136664bfe14c1d49aff3ccc94d52dfb1d59ee628426192eff5535d6058cb64317ef2992c8b124d0f72af81c9ebfaaa 该种子即为HD钱包的种子。 要特别注意:用户除了需要记住助记词外,还可以额外设置一个口令。HD种子的生成依赖于助记词和口令,丢失助记词或者丢失口令(如果设置了口令的话)都将导致HD钱包丢失! 用JavaScript代码实现为: const bip39 = require('bip39'); let words = bip39.generateMnemonic(256); console.log(words); let seedBuffer = bip39.mnemonicToSeed(words); let seedAsHex = seedBuffer.toString('hex'); // or use bip39.mnemonicToSeedHex(words) console.log(seedAsHex); 根据助记词和口令生成HD种子的方法是在mnemonicToSeed()函数中传入password: const bip39 = require('bip39'); let words = bip39.generateMnemonic(256); //const words = bip39.generateMnemonic(); // generates a 12 word mnemonic console.log(words); let password = 'bitcoin'; let seedAsHex = bip39.mnemonicToSeedHex(words, password); console.log(seedAsHex); 从助记词算法可知,只要确定了助记词和口令,生成的HD种子就是确定的。 如果两个人的助记词相同,那么他们的HD种子也是相同的。这也意味着如果把助记词抄在纸上,一旦泄漏,HD种子就泄漏了。 如果在助记词的基础上设置了口令,那么只知道助记词,不知道口令,也是无法推算出HD种子的。 把助记词抄在纸上,口令记在脑子里,这样,泄漏了助记词也不会导致HD种子被泄漏,但要牢牢记住口令。 最后,我们使用助记词+口令的方式来生成一个HD钱包的HD种子并计算出根扩展私钥: const bitcoin = require('bitcoinjs-lib'), bip39 = require('bip39'); let words = 'bleak version runway tell hour unfold donkey defy digital abuse glide please omit much cement sea sweet tenant demise taste emerge inject cause link', password = 'bitcoin'; // 计算seed: let seedHex = bip39.mnemonicToSeedHex(words, password); console.log('seed: ' + seedHex); // b59a8078...c9ebfaaa // 生成root: let root =

Web3.0入门与实战 一站式掌握4大主流区块链开发 完结

课程信息 Web3.0入门与实战 一站式掌握4大主流区块链开发 完结,从0到1全面掌握Web3.0核心技术,快速切换新赛道,夸克网盘资源下载。 课程介绍 Web3.0迎来爆发式增长,技术人才紧缺,薪资涨幅可观。但Web3.0体系庞杂,很难系统掌握。因此,我们邀请以太坊、IC、Flow及XuperChain社区资深开发者精心打造更适合初学者从0到1系统学习的课程。课程将从编程语言,到四大主流链项目开发,带大家系统全面掌握Web3.0开发技术,帮助大家顺利入行,开拓新的职业机会,增长职业竞争力及副业收入。 课程大纲 第1章 Web3.0入门通识 1 节|38分钟 视频:1-1 开篇:Web3.0 一场已经开启的互联网革命 试看 37:25 第2章 联盟链入门与Xuper Chain 开发实战 12 节|230分钟 视频:2-1 联盟链入门讲解+XuperChain介绍-联盟链及区块链原理 24:08 视频:2-2 联盟链入门讲解+Xuperchain介绍-XuperChain 整体介绍 06:17 视频:2-3 联盟链入门讲解+Xuperchain介绍-XuperChain 核心模块04:53 视频:2-4 联盟链入门讲解+Xuperchain介绍-XuperChain 核心流程06:24 视频:2-5 Xuperchain 技术原理讲解-核心框架和账本模型18:40 视频:2-6 Xuperchain 技术原理讲解-智能合约13:48 视频:2-7 Xuperchain 技术原理讲解-网络与共识及其他08:31 视频:2-8 智能合约详解35:02 视频:2-9 智能合约语言介绍(上)32:49 视频:2-10 智能合约语言介绍(下)11:37 视频:2-11 XuperChain智能合约开发实战39:06 视频:2-12 XuperChain 在Web3中应用案例介绍28:03 第3章 Flow入门与Web应用实战 10 节|301分钟 收起 视频:3-1 认识Flow Cadence 31:11 视频:3-2 Cadence基础语法(上)31:48 视频:3-3 Cadence基础语法(下)25:37 视频:3-4 Cadence核心概念-账户、交易、引用26:52 视频:3-5 Cadence核心概念-Capability、接口、访问控制20:59 视频:3-6 工程化开发配置(上)30:40 视频:3-7 工程化开发配置(下)14:14 视频:3-8 DAPP开发实战-实现登陆&NFT 铸造(上)21:49 视频:3-9 DAPP开发实战-实现登陆&NFT 铸造(下)45:33 视频:3-10 DAPP开发实战-实现NFT售卖、交易51:37 第4章 以太坊入门与众筹项目实战 13 节|247分钟 视频:4-1 区块链的基础-链式结构、证明机制,比特币钱包09:48 视频:4-2 认识以太坊-账户、交易、区块16:16 视频:4-3 Solidity与智能合约开发22:58 视频:4-4 从简单例子入手Solidity43:11 视频:4-5 Solidity初遇-运算符、控制语句19:39 视频:4-6 Solidity初遇-实战操作18:26 视频:4-7 Solidity初遇-修饰符、数据类型15:12 视频:4-8 工程开发利器 Truffle20:05 视频:4-9 合约实战-众筹项目的开发(上)13:35 视频:4-10 合约实战-众筹项目的开发(中)12:38 视频:4-11 合约实战-众筹项目的开发(下)07:53 视频:4-12 合约实战-众筹项目的部署和测试14:45 视频:4-13 以太坊token标准与ERC20Token案例31:42 第5章 IC入门与NFT智能合约实战 7 节|217分钟 视频:5-1 IC(互联网计算机)技术概览24:55 视频:5-2 在IC上搭建简易的网站32:16 视频:5-3 合约开发-MOTOKO语言入门45:25 视频:5-4 Canister 智能合约-跨Canister调用、权限管理、Cycles管理49:40 视频:5-5 实战项目-NFT标准03:10 视频:5-6 实战项目-IC上的NFT智能合约(上)31:39 视频:5-7 实战项目-IC上的NFT智能合约(下) 资源下载 下载地址:留言邮箱后发送地址