以太坊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');

你可能感兴趣的:(以太坊keystore文件生成简介)