欧意交易所资讯

uncategorized
首页 > 欧意交易所资讯 > 正文内容

以太坊去中心化网页钱包开发系列:账号Keystore文件导入导出教程

qer1236个月前 (01-06)欧意交易所资讯175

如何导入Geth创建的账户?

上一篇文章我们介绍了如何使用私钥和助记词创建账户。如果你使用已有的私钥和助记词,这实际上就是账户导入的过程。

有同学会问,我的账户是Geth生成的,怎么导入到钱包里呢?使用Geth的同学应该知道,Geth在创建账户时会生成对应的JSON文件。该文件存储了加密后的私钥信息,所以我们需要做的就是导入这个文件。该文件通常位于块数据同步的目录下。文件夹(例如:~/./)。

虽然在.js中,可以简单的使用函数来导入文件,但是了解文件的功能和原理还是非常有必要的。当然,如果你不感兴趣,可以直接跳到本文的最后一节:使用。 js实现账户导出和导入。

详细解释为什么需要文件

通过这篇文章,我们了解了开发HD钱包所涉及的BIP32、BIP44、BIP39。私钥实际上代表一个账户。保存账户最简单的方法就是直接保存私钥。如果私钥文件被盗,我们的数字资产就会被洗劫一空。

文件是以加密方式存储密钥的文件。发起交易时,首先使用密码从文件中解密私钥,然后执行签名交易。这样做会安全很多,因为只有同时窃取文件和密码的黑客才能窃取我们的数字资产。

文件是如何生成的

以太坊使用对称加密算法来加密私钥来生成文件,因此对称加密密钥(注意实际上也是发起交易时所需的解密密钥)的选择非常关键。该密钥是使用 KDF 算法导出的。 。因此,在全面介绍如何生成文件之前,有必要先介绍一下KDF。

使用KDF生成密钥

密码学KDF(密钥),其作用是从密码中推导出一个或多个秘密密钥,即生成用于加密的密钥。

事实上,在理解开发HD钱包所涉及的BIP32、BIP44和BIP39时,助记词衍生种子的算法就是KDF函数。其原理是加盐,增加哈希迭代次数。

在 中,使用了一种算法。如果用公式来表达,则推导出Key生成方程为:

代码语言:

复制

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

salt是随机salt和输出哈希值的长度。 n是CPU/开销值,开销值越高,计算越困难。 r代表块大小,p代表并行度。

直接使用POW算法就可以了

实际使用时会添加密码进行计算。表示这个过程的图是:

以太坊钱包_以太坊硬件钱包原理_以太坊钱包有什么用处

私钥的对称加密

上面已经使用 KDF 算法生成了密钥。该密钥是对称加密的密钥。这里使用的对称加密算法是aes-128-ctr。 aes-128-ctr加密算法还需要进行参数初始化。向量四。

文档

好了,现在结合具体文件的内容我们就可以很容易的明白文件是如何生成的了。

代码语言:

复制

JavaScript
{  
   "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
}

让我们解释一下每个字段:

我们来彻底梳理一下文件的生成:

使用该函数(根据密码和相应参数)生成密钥。使用上一步生成的秘钥+账户私钥+参数进行对称加密。如何将相关参数保存并输出密文为上述格式的JSON文件,保证密码正确?

当我们使用文件恢复私钥时,我们仍然使用kdf生成秘钥,然后使用秘钥对进行解密。流程如下:

以太坊钱包有什么用处_以太坊硬件钱包原理_以太坊钱包

这时候细心的同学会发现,无论使用什么指令密码来执行这个操作,都会生成私钥,但最终计算出来的以太坊私钥是否正确却不得而知。

这就是文件中 mac 值的作用。 mac值是对kdf输出和密文进行SHA3-256运算的结果。显然,如果密码不同,计算出的mac值也不同,因此可以通过它来检查密码的正确性。检验过程用图表示如下:

以太坊硬件钱包原理_以太坊钱包_以太坊钱包有什么用处

现在我们从解密的角度完整梳理一下整个过程,可以得到下图:

以太坊钱包有什么用处_以太坊硬件钱包原理_以太坊钱包

使用.js实现账户导出和导入

.js 直接提供了加载 JSON 的方法来创建钱包对象并加密生成的文件。方法如下:

代码语言:

复制

JavaScript
// 导入keystore Json
    ethers.Wallet.fromEncryptedJson(json, password, [progressCallback]).then(function(wallet) {
       // wallet
    });
    // 使用钱包对象 导出keystore Json
    wallet.encrypt(pwd, [progressCallback].then(function(json) {
        // 保存json
    });

现在结合接口完全实现账户导出和导入。我们先来看看出口。 UI图如下:

以太坊钱包_以太坊硬件钱包原理_以太坊钱包有什么用处

HTML代码如下:

代码语言:

复制

JavaScript
KeyStore 导出:

    
        密码:
        
    
    
         
        
            导出
        
    

上面主要定义了一个密码输入框和一个导出按钮。点击“导出”后,处理逻辑代码如下:

代码语言:

复制

JavaScript
// "导出" 按钮,执行exportKeystore函数
  $('#save-keystore').click(exportKeystore);
  exportKeystore: function() {
    // 获取密码
    var pwd = $('#save-keystore-file-pwd');
    // wallet 是上一篇文章中生成的钱包对象
    wallet.encrypt(pwd.val()).then(function(json) {
      var blob = new Blob([json], {type: "text/plain;charset=utf-8"});
      // 使用了FileSaver.js 进行文件保存
      saveAs(blob, "keystore.json");
    });
  }

.js 是一个可用于在页面上保存文件的库。

我们来看看导入的文件。 UI图如下:

以太坊钱包_以太坊钱包有什么用处_以太坊硬件钱包原理

代码语言:

复制

JavaScript
 加载账号Keystore文件

    
        Keystore:
        把Json文件拖动到这里
    
    
        密码:
        
    
    
         
        
            解密
        
    

上面主要定义了一个文件输入框、一个密码输入框和一个“解密”按钮。因此,处理逻辑包括两部分,一是读取文件,二是解析并加载账户。关键代码如下:

代码语言:

复制

JavaScript
 // 使用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]);

哈哈哈,又到了升职的时间了。完整源码请订阅简单区块链技术小专栏。赶快订阅吧。如果你路过,千万不要错过。

参考文档

什么是文件

深入浅出地讲解区块链——系统学习区块链,打造最好的区块链技术博客。

阅读剩余的77%

扫描二维码推送至手机访问。

版权声明:本文由本站发布,如需转载请注明出处。

转载请注明出处https://juxingsy.com/post/2015.html

标签: 以太坊钱包

相关文章

百度希壤揭开神秘面纱:6.0版本开放内测,元宇宙发展仍面临挑战

百度希壤揭开神秘面纱:6.0版本开放内测,元宇宙发展仍面临挑战

今天,百度首次公布了“ Xiran”平台的奥秘! 吉文Xi于12月21日报道说,在“百度2021·朝高级访问日”上,百度的荟萃分类产品“ Xiang”正式打开了有针对性的内部测试,并启动了“创作者之城...

深入解析Web2.0:与Web1.0的不同及显著特征全揭秘

深入解析Web2.0:与Web1.0的不同及显著特征全揭秘

如今,我们经常谈论Web2.0,那么,什么是Web2.0?它与Web1.0有何不同?实际上,Web2.0没有明确的概念。与Web1.0相比,它具有明显的特征:每个人都是内容生产者和收购方,在个性化信息...

BRC 认证知识梳理:全球食品工业里程碑式的权威标准

什么是BRC认证? BRC是英国零售商协会的缩写。 专门针对食品供应商制定了一套质量体系审核标准,其中包括 食品供货商质量安全卫生保障能力考核要求 1998年, 为响应国家食品行业发展的需要,英国零售...

百度借科技让元宇宙想象成真,多活动创新营销

百度借科技让元宇宙想象成真,多活动创新营销

“这是'Oasis'世界,唯一限制您在这里的世界就是您自己的想象力。” 贝杜(Baidu)凭借其深刻的技术基因,不断地将电影《第一名》中的元世界世界的想象力带入了现实。截至2022年9...

NFT 概念火爆,众多上市公司争相入局,数字藏品平台层出不穷

NFT 概念火爆,众多上市公司争相入局,数字藏品平台层出不穷

自从元宇宙概念火爆以来,NFT概念也被推崇为进入元宇宙的身份证,众多上市公司争相挤上这条日益拥挤的赛道。 A股NFT概念自4月27日以来持续上涨,与元宇宙概念板块走势基本一致。截至6月23日收盘,板块...

区块链工程师在婚恋网站的惊人经历:职位标签如何改变交友命运

今年年初,一位来自杭州的工程师在某交友网站注册了账号,但一个多月没有人注册他的账号。 随后,他在公司职称栏添加了“区块链工程师”,短短几天就收到好友私信238条。最终因为私信太多,无法回复,他只好选择...

加入欧意交易所,探索元宇宙世界!

探索DeFi,DApps, NFTs 和GameFi的世界,和OKX一起创造未来!