在以太坊開發(fā)中蕉饼,經(jīng)常會(huì)遇到將賬戶私鑰的keystore與privatekey相互轉(zhuǎn)換的需求歉嗓,今天特以此文整理記錄一下妆兑。
轉(zhuǎn)換使用的是keythereum
工具力试,github地址為:
https://github.com/ethereumjs/keythereum
Keythereum是一個(gè)用于生成,導(dǎo)入和導(dǎo)出以太坊密鑰的JavaScript工具贝室。
1契讲、安裝
npm install keythereum
2仿吞、創(chuàng)建一個(gè)賬戶
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); //將密鑰寫入到當(dāng)前js目錄下的keystore目錄下
console.log(keyObject) //控制臺(tái)輸出
輸出的是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形式轉(zhuǎn)換為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'));
運(yùn)行后會(huì)看到賬戶私鑰:
> node keystore2pk.js
eaffcd749482e68ca4ccf5a07a52eb7ff876ea461fbab642b2b57bcb33edb280
4银伟、privateKey轉(zhuǎn)換為keystore
可以使用Geth客戶端來(lái)進(jìn)行轉(zhuǎn)換你虹,進(jìn)入到Geth控制臺(tái)中,使用命令:
> web3.personal.importRawKey("eaffcd749482e68ca4ccf5a07a52eb7ff876ea461fbab642b2b57bcb33edb280","linjing")
"0xd2f9e7716cc88944e5ed9f675649532c80d765f8"
keystore已經(jīng)存放到了--datadir
指定的目錄中彤避。