亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

以太坊錢(qián)包開(kāi)發(fā)系列2 - 賬號(hào)Keystore文件導(dǎo)入導(dǎo)出

SegmentFault / 1482人閱讀

摘要:文件如何生成的以太坊是使用對(duì)稱加密算法來(lái)加密私鑰生成文件,因此對(duì)稱加密秘鑰注意它其實(shí)也是發(fā)起交易時(shí)需要的解密秘鑰的選擇就非常關(guān)鍵,這個(gè)秘鑰是使用算法推導(dǎo)派生而出。加密推倒的相關(guān)配置是用于加密以太坊私鑰的對(duì)稱加密算法。

本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)
原文鏈接:[使用 ethers.js 開(kāi)發(fā)以太坊 Web 錢(qián)包 2 - 賬號(hào) Keystore 文件導(dǎo)入導(dǎo)出)
](https://learnblockchain.cn/20...,請(qǐng)讀者前往原文閱讀

以太坊去中心化網(wǎng)頁(yè)錢(qián)包開(kāi)發(fā)系列,將從零開(kāi)始開(kāi)發(fā)出一個(gè)可以實(shí)際使用的錢(qián)包,本系列文章是理論與實(shí)戰(zhàn)相結(jié)合,一共有四篇:創(chuàng)建錢(qián)包賬號(hào)、賬號(hào)Keystore文件導(dǎo)入導(dǎo)出、展示錢(qián)包信息及發(fā)起簽名交易、發(fā)送Token(代幣),這是第二篇,主要介紹錢(qián)包賬號(hào)導(dǎo)出與導(dǎo)入,將對(duì)Keystore文件的生成的原理進(jìn)行介紹。

如何導(dǎo)入Geth創(chuàng)建的賬號(hào)?

在上一篇文章,介紹了如何使用私鑰及助記詞來(lái)創(chuàng)建賬號(hào),如果是使用已有的私鑰及助記詞,這其實(shí)也是賬號(hào)導(dǎo)入的過(guò)程。

有一些同學(xué)會(huì)問(wèn),我的賬號(hào)是Geth生成的,如何導(dǎo)入到錢(qián)包呢?使用Geth的同學(xué),應(yīng)該知道Geth在創(chuàng)建賬號(hào)時(shí)會(huì)生成一個(gè)對(duì)應(yīng)keystore JSON文件,Keystore文件存儲(chǔ)加密后的私鑰信息,因此我們需要做的就是導(dǎo)入這個(gè)Keystore文件,這個(gè)文件通常在同步區(qū)塊數(shù)據(jù)的目錄下的keystore文件夾(如: ~/.ethereum/keystore)里。

盡管在ethers.js 中,簡(jiǎn)單的使用一個(gè)函數(shù)就可以完成keystore文件的導(dǎo)入,不過(guò)理解Keystore 文件的作用及原理還是非常有必要的,當(dāng)然如果你是在沒(méi)有興趣,可以直接跳到本文最后一節(jié):使用ethers.js 實(shí)現(xiàn)賬號(hào)導(dǎo)出導(dǎo)入。

詳細(xì)解讀 Keystore 文件 為什么需要 Keystore 文件

通過(guò)這篇文章理解開(kāi)發(fā)HD 錢(qián)包涉及的 BIP32、BIP44、BIP39,私鑰其實(shí)就代表了一個(gè)賬號(hào),最簡(jiǎn)單的保管賬號(hào)的方式就是直接把私鑰保存起來(lái),如果私鑰文件被人盜取,我們的數(shù)字資產(chǎn)將洗劫一空。

Keystore 文件就是一種以加密的方式存儲(chǔ)密鑰的文件,這樣的發(fā)起交易的時(shí)候,先從Keystore 文件是使用密碼解密出私鑰,然后進(jìn)行簽名交易。這樣做之后就會(huì)安全的多,因?yàn)橹挥泻诳屯瑫r(shí)盜取 keystore 文件和密碼才能盜取我們的數(shù)字資產(chǎn)。

Keystore 文件如何生成的

以太坊是使用對(duì)稱加密算法來(lái)加密私鑰生成Keystore文件,因此對(duì)稱加密秘鑰(注意它其實(shí)也是發(fā)起交易時(shí)需要的解密秘鑰)的選擇就非常關(guān)鍵,這個(gè)秘鑰是使用KDF算法推導(dǎo)派生而出。因此在完整介紹Keystore 文件如何生成前,有必要先介紹一下KDF。

使用 KDF 生成秘鑰

密碼學(xué)KDF(key derivation functions),其作用是通過(guò)一個(gè)密碼派生出一個(gè)或多個(gè)秘鑰,即從 password 生成加密用的 key。

其實(shí)在理解開(kāi)發(fā)HD 錢(qián)包涉及的 BIP32、BIP44、BIP39中介紹助記詞推導(dǎo)出種子的PBKDF2算法就是一種KDF函數(shù),其原理是加鹽以及增加哈希迭代次數(shù)。

而在Keystore中,是用的是Scrypt算法,用一個(gè)公式來(lái)表示的話,派生的Key生成方程為:

DK = Scrypt(salt, dk_len, n, r, p)

其中的 salt 是一段隨機(jī)的鹽,dk_len 是輸出的哈希值的長(zhǎng)度。n 是 CPU/Memory 開(kāi)銷值,越高的開(kāi)銷值,計(jì)算就越困難。r 表示塊大小,p 表示并行度。

Litecoin 就使用 scrypt 作為它的 POW 算法

實(shí)際使用中,還會(huì)加上一個(gè)密碼進(jìn)行計(jì)算,用一張圖來(lái)表示這個(gè)過(guò)程就是:

對(duì)私鑰進(jìn)行對(duì)稱加密

上面已經(jīng)用KDF算法生成了一個(gè)秘鑰,這個(gè)秘鑰就是接著進(jìn)行對(duì)稱加密的秘鑰,這里使用的對(duì)稱加密算法是 aes-128-ctr,aes-128-ctr 加密算法還需要用到一個(gè)參數(shù)初始化向量 iv。

Keystore文件

好了,我們現(xiàn)在結(jié)合具體 Keystore文件的內(nèi)容,就很容易理解了Keystore 文件怎么產(chǎn)生的了。

{  
   "address":"856e604698f79cef417aab...",
   "crypto":{  
      "cipher":"aes-128-ctr",
      "ciphertext":"13a3ad2135bef1ff228e399dfc8d7757eb4bb1a81d1b31....",
      "cipherparams":{  
         "iv":"92e7468e8625653f85322fb3c..."
      },
      "kdf":"scrypt",
      "kdfparams":{  
         "dklen":32,
         "n":262144,
         "p":1,
         "r":8,
         "salt":"3ca198ce53513ce01bd651aee54b16b6a...."
      },
      "mac":"10423d837830594c18a91097d09b7f2316..."
   },
   "id":"5346bac5-0a6f-4ac6-baba-e2f3ad464f3f",
   "version":3
}

來(lái)解讀一下各個(gè)字段:

address: 賬號(hào)地址

version: Keystore文件的版本,目前為第3版,也稱為V3 KeyStore。

id : uuid

crypto: 加密推倒的相關(guān)配置.

cipher 是用于加密以太坊私鑰的對(duì)稱加密算法。用的是 aes-128-ctr 。

cipherparams 是 aes-128-ctr 加密算法需要的參數(shù)。在這里,用到的唯一的參數(shù) iv。

ciphertext 是加密算法輸出的密文,也是將來(lái)解密時(shí)的需要的輸入。

kdf: 指定使用哪一個(gè)算法,這里使用的是 scrypt。

kdfparams: scrypt函數(shù)需要的參數(shù)

mac: 用來(lái)校驗(yàn)密碼的正確性, mac= sha3(DK[16:32], ciphertext) 下面一個(gè)小節(jié)多帶帶分析。

我們來(lái)完整梳理一下 Keystore 文件的產(chǎn)生:

使用scrypt函數(shù) (根據(jù)密碼 和 相應(yīng)的參數(shù)) 生成秘鑰

使用上一步生成的秘鑰 + 賬號(hào)私鑰 + 參數(shù) 進(jìn)行對(duì)稱加密。

把相關(guān)的參數(shù) 和 輸出的密文 保存為以上格式的 JSON 文件

如何確保密碼是對(duì)的?

當(dāng)我們?cè)谑褂肒eystore文件來(lái)還原私鑰時(shí),依然是使用kdf生成一個(gè)秘鑰,然后用秘鑰對(duì)ciphertext進(jìn)行解密,其過(guò)程如下:

此時(shí)細(xì)心的同學(xué)會(huì)發(fā)現(xiàn),無(wú)論使用說(shuō)明密碼,來(lái)進(jìn)行這個(gè)操作,都會(huì)生成一個(gè)私鑰,但是最終計(jì)算的以太坊私鑰到底是不是正確的,卻不得而知。

這就是 keystore 文件中 mac 值的作用。mac 值是 kdf輸出 和 ciphertext 密文進(jìn)行SHA3-256運(yùn)算的結(jié)果,顯然密碼不同,計(jì)算的mac 值也不同,因此可以用來(lái)檢驗(yàn)密碼的正確性。檢驗(yàn)過(guò)程用圖表示如下:

現(xiàn)在我們以解密的角度完整的梳理下流程,就可以得到以下圖:

用ethers.js 實(shí)現(xiàn)賬號(hào)導(dǎo)出導(dǎo)入

ethers.js 直接提供了加載keystore JSON來(lái)創(chuàng)建錢(qián)包對(duì)象以及加密生成keystore文件的方法,方法如下:

// 導(dǎo)入keystore Json
    ethers.Wallet.fromEncryptedJson(json, password, [progressCallback]).then(function(wallet) {
       // wallet
    });

    // 使用錢(qián)包對(duì)象 導(dǎo)出keystore Json
    wallet.encrypt(pwd, [progressCallback].then(function(json) {
        // 保存json
    });

現(xiàn)在結(jié)合界面來(lái)完整的實(shí)現(xiàn)賬號(hào)導(dǎo)出及導(dǎo)入,先看看導(dǎo)出,UI圖如下:

HTML 代碼如下:

    

KeyStore 導(dǎo)出:

密碼:
導(dǎo)出

上面主要定義了一個(gè)密碼輸入框和一個(gè)導(dǎo)出按鈕,點(diǎn)擊“導(dǎo)出”后,處理邏輯代碼如下:

// "導(dǎo)出" 按鈕,執(zhí)行exportKeystore函數(shù)
  $("#save-keystore").click(exportKeystore);

  exportKeystore: function() {
    // 獲取密碼
    var pwd = $("#save-keystore-file-pwd");

    // wallet 是上一篇文章中生成的錢(qián)包對(duì)象
    wallet.encrypt(pwd.val()).then(function(json) {
      var blob = new Blob([json], {type: "text/plain;charset=utf-8"});

      // 使用了FileSaver.js 進(jìn)行文件保存
      saveAs(blob, "keystore.json");

    });
  }

FileSaver.js 是可以用來(lái)在頁(yè)面保存文件的一個(gè)庫(kù)。

再來(lái)看看導(dǎo)入keystore 文件, UI圖如下:

 

加載賬號(hào)Keystore文件

Keystore:
把Json文件拖動(dòng)到這里
密碼:
解密

上面主要定義了一個(gè)文件輸入框、一個(gè)密碼輸入框及一個(gè)“解密“按鈕,因此處理邏輯包含兩部分,一是讀取文件,二是解析加載賬號(hào),關(guān)鍵代碼如下:

// 使用FileReader讀取文件,

var fileReader = new FileReader();
 fileReader.onload = function(e) {
   var json = e.target.result;

   // 從加載
   ethers.Wallet.fromEncryptedJson(json, password).then(function(wallet) {

   }, function(error) {

   });

 };
fileReader.readAsText(inputFile.files[0]);

哈哈哈,有到了推廣時(shí)間了,完整源碼請(qǐng)訂閱深入淺出區(qū)塊鏈技術(shù)小專欄查看,趕緊訂閱吧,走過(guò)路過(guò),不容錯(cuò)過(guò)。
戳鏈接收看詳細(xì)的視頻課程講解。

參考文檔

what-is-an-ethereum-keystore-file

深入淺出區(qū)塊鏈 - 系統(tǒng)學(xué)習(xí)區(qū)塊鏈,打造最好的區(qū)塊鏈技術(shù)博客。

深入淺出區(qū)塊鏈知識(shí)星球最專業(yè)技術(shù)問(wèn)答社區(qū),加入社區(qū)還可以在微信群里和300多位區(qū)塊鏈技術(shù)愛(ài)好者一起交流。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/24363.html

相關(guān)文章

  • 如何開(kāi)發(fā)一款以太(安卓)錢(qián)包系列2 - 導(dǎo)入賬號(hào)賬號(hào)管理

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接以太坊安卓錢(qián)包系列導(dǎo)入賬號(hào)及賬號(hào)管理原文已更新,請(qǐng)讀者前往原文閱讀這是如何開(kāi)發(fā)一款以太坊安卓錢(qián)包系列第篇,如何導(dǎo)入賬號(hào)。提示大家閱讀本文時(shí),最好把代碼庫(kù)克隆到本地對(duì)照閱讀。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊(安卓)錢(qián)包系列2 - 導(dǎo)入賬號(hào)及賬號(hào)管理原文已更新,請(qǐng)讀者前往原文閱讀 這是如何開(kāi)發(fā)一款以太坊(安卓)錢(qián)包系列第2篇,如何導(dǎo)入賬號(hào)。...

    Tecode 評(píng)論0 收藏0
  • 如何開(kāi)發(fā)一款以太(安卓)錢(qián)包系列1 - 通過(guò)助記詞創(chuàng)建賬號(hào)

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接以太坊安卓錢(qián)包系列通過(guò)助記詞創(chuàng)建賬號(hào)原文已更新,請(qǐng)讀者前往原文閱讀上周我開(kāi)源了一款錢(qián)包,反映很好,一周時(shí)間不到已經(jīng)快到。的功能和類似,它是比特幣協(xié)議的實(shí)現(xiàn),他實(shí)現(xiàn)了及相關(guān)協(xié)議。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊(安卓)錢(qián)包系列1 - 通過(guò)助記詞創(chuàng)建賬號(hào)原文已更新,請(qǐng)讀者前往原文閱讀 上周我開(kāi)源了一款錢(qián)包,反映很好,一周時(shí)間不到已經(jīng)快到10...

    bbbbbb 評(píng)論0 收藏0
  • 如何開(kāi)發(fā)一款以太(安卓)錢(qián)包系列1 - 通過(guò)助記詞創(chuàng)建賬號(hào)

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接以太坊安卓錢(qián)包系列通過(guò)助記詞創(chuàng)建賬號(hào)原文已更新,請(qǐng)讀者前往原文閱讀上周我開(kāi)源了一款錢(qián)包,反映很好,一周時(shí)間不到已經(jīng)快到。的功能和類似,它是比特幣協(xié)議的實(shí)現(xiàn),他實(shí)現(xiàn)了及相關(guān)協(xié)議。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊(安卓)錢(qián)包系列1 - 通過(guò)助記詞創(chuàng)建賬號(hào)原文已更新,請(qǐng)讀者前往原文閱讀 上周我開(kāi)源了一款錢(qián)包,反映很好,一周時(shí)間不到已經(jīng)快到10...

    genefy 評(píng)論0 收藏0
  • 以太錢(qián)包開(kāi)發(fā)系列1 - 創(chuàng)建錢(qián)包賬號(hào)

    摘要:錢(qián)包功能一個(gè)錢(qián)包通常主要包含的功能有賬號(hào)管理主要是私鑰的管理創(chuàng)建賬號(hào)賬號(hào)導(dǎo)入導(dǎo)出賬號(hào)信息展示如以太幣余額代幣余額。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:[使用 ethers.js 開(kāi)發(fā)以太坊 Web 錢(qián)包 1 - 創(chuàng)建錢(qián)包賬號(hào))](https://learnblockchain.cn/20...,請(qǐng)讀者前往原文閱讀 以太坊去中心化網(wǎng)頁(yè)錢(qián)包開(kāi)發(fā)系列,將從零開(kāi)始開(kāi)發(fā)出一個(gè)可以實(shí)際使用的錢(qián)...

    1fe1se 評(píng)論0 收藏0
  • 以太開(kāi)發(fā)去中心化應(yīng)用系列——以太錢(qián)包(一)

    摘要:以太坊的錢(qián)包在以太坊中,所有轉(zhuǎn)賬等交易操作都需要用賬戶來(lái)完成,一個(gè)合法的交易需要有發(fā)起賬戶和接收賬戶。比如常見(jiàn)的以太坊錢(qián)包有等。 一、錢(qián)包的說(shuō)明 1. 現(xiàn)實(shí)中的錢(qián)包 大部分人錢(qián)包里都會(huì)有幾張銀行卡,每一張銀行卡都對(duì)應(yīng)著一個(gè)賬戶,我們可以用這些賬戶進(jìn)行支付、轉(zhuǎn)賬等操作。那么錢(qián)包的作用就是存放和管理這些銀行卡(賬戶)。 2. 以太坊的錢(qián)包 在以太坊中,所有轉(zhuǎn)賬等交易操作都需要用賬戶來(lái)完成,...

    Pocher 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<