NodeJs实现以太坊钱包keystore生成,导入私钥,导出私钥,导入keystore,导出Keystore,签名,转账,转账确认

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiang_xinxing/article/details/83215169

Keythereum是一个用于生成,导入和导出以太坊密钥的JavaScript工具。 这提供了一种在本地和Web钱包中使用同一帐户的简单方法。 它可用于可验证和存储钱包。

Keythereum使用相同的密钥派生函数(PBKDF2-SHA256或scrypt),对称密码(AES-128-CTR或AES-128-CBC)和消息验证代码作为geth。 您可以将生成的密钥导出到文件,将其复制到数据目录的密钥库,然后立即开始在您的本地以太坊客户端中使用它。

从版本0.5.0开始,keythereum的加密和解密函数都返回Buffers而不是字符串。 对于直接使用这些功能的人来说,这是一个重大改变。

1.1.使用keythereum生产keystore

在生产keystore之前,你必须有一个nodeJs的环境,并且安装keythereum

npm install keythereum

或者使用压缩的浏览器文件dist/keythereum.min.js,以便在浏览器中使用。 使用一下代码引入

<script src="dist/keythereum.min.js" type="text/javascript"></script>

生成一个新的随机私钥(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);
    });
});

下图是运行结果:

.:
.:

1.2.将keystore到文件中存储

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的存储目录

.:
.:

1.3.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)
});

1.4.从keystore中恢复私钥

这里恢复出来的私钥是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/

猜你喜欢

转载自blog.csdn.net/jiang_xinxing/article/details/83215169