1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      如何進(jìn)行Keystore文件的導(dǎo)入導(dǎo)出

      本篇文章為大家展示了如何進(jìn)行Keystore文件的導(dǎo)入導(dǎo)出,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

      在銀海等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),全網(wǎng)整合營銷推廣,外貿(mào)網(wǎng)站建設(shè),銀海網(wǎng)站建設(shè)費(fèi)用合理。

      將從零開始開發(fā)出一個(gè)可以實(shí)際使用的錢包,這里主要介紹錢包賬號(hào)導(dǎo)出與導(dǎo)入,將對(duì)Keystore文件的生成的原理進(jìn)行介紹。

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

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

      有一些同學(xué)會(huì)問,我的賬號(hào)是Geth生成的,如何導(dǎo)入到錢包呢?使用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 中,簡單的使用一個(gè)函數(shù)就可以完成keystore文件的導(dǎo)入,不過理解Keystore 文件的作用及原理還是非常有必要的,當(dāng)然如果你是在沒有興趣,可以直接跳到本文最后一節(jié):使用ethers.js 實(shí)現(xiàn)賬號(hào)導(dǎo)出導(dǎo)入。

      詳細(xì)解讀 Keystore 文件

      為什么需要 Keystore 文件

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

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

      Keystore 文件如何生成的

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

      使用 KDF 生成秘鑰

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

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

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

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

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

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

      實(shí)際使用中,還會(huì)加上一個(gè)密碼進(jìn)行計(jì)算。

      對(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
      }

      來解讀一下各個(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 是加密算法輸出的密文,也是將來解密時(shí)的需要的輸入。

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

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

        • mac: 用來校驗(yàn)密碼的正確性, mac= sha3(DK[16:32], ciphertext) 下面一個(gè)小節(jié)單獨(dú)分析。

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

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

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

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

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

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

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

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

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

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

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

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

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

      如何進(jìn)行Keystore文件的導(dǎo)入導(dǎo)出

      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 是上一篇文章中生成的錢包對(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 是可以用來在頁面保存文件的一個(gè)庫。

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

      如何進(jìn)行Keystore文件的導(dǎo)入導(dǎo)出

       

      加載賬號(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]);

       如何進(jìn)行Keystore文件的導(dǎo)入導(dǎo)出

      上述內(nèi)容就是如何進(jìn)行Keystore文件的導(dǎo)入導(dǎo)出,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


      本文題目:如何進(jìn)行Keystore文件的導(dǎo)入導(dǎo)出
      本文來源:http://www.ef60e0e.cn/article/ghschg.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        车致| 新竹县| 顺平县| 拉孜县| 大关县| 昔阳县| 大港区| 老河口市| 唐山市| 仁怀市| 大兴区| 即墨市| 济源市| 毕节市| 饶河县| 昭苏县| 军事| 开平市| 辛集市| 佳木斯市| 万宁市| 年辖:市辖区| 勃利县| 星子县| 称多县| 绥江县| 尼玛县| 安龙县| 习水县| 富民县| 桐城市| 崇阳县| 鹤壁市| 元谋县| 罗定市| 河北区| 新密市| 南岸区| 宁陵县| 维西| 临泽县|