以太坊keystore文件生成简介

以太坊钱包大致分两类

  1. 基于geth原生钱包

随机生成256位私钥,用密码加密后生成json字符串并存储成keystore文件。

  1. 基于BIP协议生成

这部分只是将原生钱包的生成私钥部分做了修改,用BIP协议替代了随机256位私钥。

BIP是比特币的升级协议

BIP32是为了方便管理私钥,用一个seed生成密钥树。

BIP39协议是用助记词方式编码了seed。助记词和seed是等效的,助记词是seed的另一种编码格式。

BIP44协议进一步扩展了地址应用范围,覆盖比特币,以太坊等多种格式地址。

基于web3的实现:

//助记词,引用
bip39 = require('bip39');
hdkey = require('ethereumjs-wallet/hdkey');
util = require('ethereumjs-util');

//生成助记词
mnemonic = bip39.generateMnemonic();

//根据助记词,生成seed,获取key(公私钥对)
seed = bip39.mnemonicToSeed(mnemonic);
hdWallet = hdkey.fromMasterSeed(seed);
//key0
key0 = hdWallet.derivePath("m/44'/60'/0'/0/0");
//key1
key1 = hdWallet.derivePath("m/44'/60’/0’/0/1");
.............

//根据key0生成钱包地址
address0 = util.toChecksumAddress(util.pubToAddress(key0._hdkey._publicKey, true).toString('hex'));

//获取key0私钥
privateKey0 = "0x" + key0._hdkey._privateKey.toString('hex');

//用私钥获取以太坊账户account0
account0 = web3.eth.accounts.privateKeyToAccount(privateKey0);

//加密私钥并生成keystore的json文件
acc0json = web3.eth.accounts.encrypt(privateKey, 'password');

//用keystore文件获取以太坊账户account0
account0 = web3.eth.accounts.decrypt(acc0json,'password');
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文:Wallets “钱包”这个词用来描述以太坊中的一些不同的东西。 在较高级别,钱包是用作主要用户界面的应用程...
    Jisen阅读 6,607评论 0 8
  • 文|李伟志 狭义上数字资产钱包为私钥存储工具,广义上含余额查询、发送交易等基本功能。2018年Q1全球数字资产钱包...
    ROW供享社阅读 6,435评论 0 11
  • 原文地址 https://mbinary.coding.me/introduction-to-bitcoin.ht...
    mbinary阅读 10,909评论 0 4
  • 几千年前,新朝最腐败时期。 胡诚弋一瘸一拐,走上山去,他想自杀。他的一切,好像都被王莽毁了。他的家庭,妻离子散;朝...
    孔Candy阅读 1,589评论 0 1
  • 田柾国第一次睁眼的时候,看见的第一个人,是朴智旻。 有人说初生的婴儿眼睛尚未长成,尚未有自己的意识,更不懂眼前人的...
    Diuerrr阅读 1,706评论 0 0

友情链接更多精彩内容