以太坊账户私钥形态keystore与privatekey相互转换

在以太坊开发中,经常会遇到将账户私钥的keystore与privatekey相互转换的需求,今天特以此文整理记录一下。

转换使用的是keythereum工具,github地址为:

https://github.com/ethereumjs/keythereum

Keythereum是一个用于生成,导入和导出以太坊密钥的JavaScript工具。

1、安装

npm install keythereum

2、创建一个账户

var keythereum = require("keythereum");
// optional private key and initialization vector sizes in bytes
// (if params is not passed to create, keythereum.constants is used by default)
var params = { keyBytes: 32, ivBytes: 16 };

var password = "linjing";

// synchronous
var dk = keythereum.create(params);

var options = {
  kdf: "pbkdf2",
  cipher: "aes-128-ctr",
  kdfparams: {
    c: 262144,
    dklen: 32,
    prf: "hmac-sha256"
  }
};
// synchronous
var keyObject = keythereum.dump(password, dk.privateKey, dk.salt, dk.iv, options);
keythereum.exportToFile(keyObject); //将密钥写入到当前js目录下的keystore目录下
console.log(keyObject) //控制台输出

输出的是keystore形式的密钥,如:

> node createKey.js 

{ address: 'd2f9e7716cc88944e5ed9f675649532c80d765f8',
  crypto:
   { cipher: 'aes-128-ctr',
     ciphertext:
      'd826f2ac920a03e47c030e5431d16e097ef68ada8db9c00031dae6689446d499',
     cipherparams: { iv: '565d6d8b427a5d5198379f72b631c539' },
     mac:
      'e56cbd9a027f96127845b310efce8204a127cad72207a30a01b1d4dcf8b56831',
     kdf: 'pbkdf2',
     kdfparams:
      { c: 262144,
        dklen: 32,
        prf: 'hmac-sha256',
        salt:
         'f2dd3458803fee559c7c5593fedbe32eab747e807ff2151a6597452d1484705d' } },
  id: 'b91f02be-eeb5-4cd8-829e-b8d077dbfdf1',
  version: 3 }

3、keystore形式转换为privatekey

var keythereum = require("keythereum");
//keystore密钥存放目录,在project目录下的keystore目录下,密钥以address命名
var datadir = "/Users/linjingjing/Documents/project";
var address= "d2f9e7716cc88944e5ed9f675649532c80d765f8";
const password = "linjing";

var keyObject = keythereum.importFromFile(address, datadir);
var privateKey = keythereum.recover(password, keyObject);
console.log(privateKey.toString('hex'));

运行后会看到账户私钥:

> node keystore2pk.js

eaffcd749482e68ca4ccf5a07a52eb7ff876ea461fbab642b2b57bcb33edb280

4、privateKey转换为keystore
可以使用Geth客户端来进行转换,进入到Geth控制台中,使用命令:

> web3.personal.importRawKey("eaffcd749482e68ca4ccf5a07a52eb7ff876ea461fbab642b2b57bcb33edb280","linjing")

"0xd2f9e7716cc88944e5ed9f675649532c80d765f8"

keystore已经存放到了--datadir指定的目录中。

你可能感兴趣的:(以太坊账户私钥形态keystore与privatekey相互转换)