Keythereum是一个用于生成,导入和导出以太坊密钥的JavaScript工具。 这提供了一种在本地和Web钱包中使用同一帐户的简单方法。 它可用于可验证和存储钱包。
Keythereum使用相同的密钥派生函数(PBKDF2-SHA256或scrypt),对称密码(AES-128-CTR或AES-128-CBC)和消息验证代码作为geth。 您可以将生成的密钥导出到文件,将其复制到数据目录的密钥库,然后立即开始在您的本地以太坊客户端中使用它。
从版本0.5.0开始,keythereum的加密和解密函数都返回Buffers而不是字符串。 对于直接使用这些功能的人来说,这是一个重大改变。
在生产keystore之前,你必须有一个nodeJs的环境,并且安装keythereum
npm install keythereum
或者使用压缩的浏览器文件dist/keythereum.min.js,以便在浏览器中使用。 使用一下代码引入
生成一个新的随机私钥(256位),以及密钥派生函数使用的salt(256位),用于AES-128-CTR的初始化向量(128位)对密钥进行加密。 如果传递回调函数,则create是异步的,否则是同步的。
下面是生成keystore的代码:
var keythereum = require("keythereum");
var params = { keyBytes: 32, ivBytes: 16 };
var dk = keythereum.create(params);
keythereum.create(params, function (dk) {
var password = "wheethereum";
var kdf = "pbkdf2";
var options = {
kdf: "pbkdf2",
cipher: "aes-128-ctr",
kdfparams: {
c: 262144,
dklen: 32,
prf: "hmac-sha256"
}
};
keythereum.dump(password, dk.privateKey, dk.salt, dk.iv, options, function (keyObject) {
console.log(keyObject);
});
});
下图是运行结果:
.:
dump创建一个对象而不是JSON字符串。 在Node中,exportToFile方法提供了一种将此格式化的密钥对象导出到文件的简便方法。 它在keystore子目录中创建一个JSON文件,并使用geth的当前文件命名约定(ISO时间戳与密钥派生的以太坊地址连接)。
代码如下:
var keythereum = require("keythereum");
var params = { keyBytes: 32, ivBytes: 16 };
var dk = keythereum.create(params);
keythereum.create(params, function (dk) {
var password = "wheethereum";
var kdf = "pbkdf2";
var options = {
kdf: "pbkdf2",
cipher: "aes-128-ctr",
kdfparams: {
c: 262144,
dklen: 32,
prf: "hmac-sha256"
}
};
keythereum.dump(password, dk.privateKey, dk.salt, dk.iv, options, function (keyObject) {
keythereum.exportToFile(keyObject);
});
});
成功之后在你的keystor目录下将看到下面这些信息,如果出现错误,最可能的原因就是你的目录下没有keystore这个目录,当然以上代码中你也可以指定keystore的存储目录
.:
从geth的密钥库导入密钥只能在Node上完成。 将JSON文件解析为与上面的keyObject具有相同结构的对象。
var datadir = "/home/jack/.ethereum-test";
var keyObject = keythereum.importFromFile(address, datadir);
console.log(keyObject)
keythereum.importFromFile(address, datadir, function (keyObject) {
console.log(keyObject)
});
这里恢复出来的私钥是buffer格式的,password是你设置的密码,keyObject就是keystore
var privateKey = keythereum.recover(password, keyObject);
console.log(privateKey)
keythereum.recover(password, keyObject, function (privateKey) {
console.log(privateKey)
});
区块链钱包技术指南GitHub:https://github.com/guoshijiang/blockchain-wallet/
关注问我技术公众号,加小问,拉您入技术交流群: