1. 程式人生 > >NodeJs實現以太坊錢包keystore生成,匯入私鑰,匯出私鑰,匯入keystore,匯出Keystore,簽名,轉賬,轉賬確認

NodeJs實現以太坊錢包keystore生成,匯入私鑰,匯出私鑰,匯入keystore,匯出Keystore,簽名,轉賬,轉賬確認

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/