欧意交易所资讯

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

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

qer1231年前 (2025-01-06)欧意交易所资讯464

如何导入Geth创建的账户?

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

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

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

详细解释为什么需要文件

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

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

文件是如何生成的

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

使用KDF生成密钥

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

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

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

代码语言:

复制

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

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

直接使用POW算法就可以了

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

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

私钥的对称加密

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

文档

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

代码语言:

复制

{  
   "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 的方法来创建钱包对象并加密生成的文件。方法如下:

代码语言:

复制

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

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

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

HTML代码如下:

代码语言:

复制

KeyStore 导出:

密码:
导出

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

代码语言:

复制

// "导出" 按钮,执行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图如下:

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

代码语言:

复制

 

加载账号Keystore文件

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

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

代码语言:

复制

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

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

参考文档

什么是文件

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

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

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

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

标签: 以太坊钱包
分享给朋友:

相关文章

狗狗币价格波动分析:市场情绪与投资机遇的深度解析

狗狗币的价格一直是加密货币市场中受关注的方面。它的价格波动较为明显,并且深受市场情绪的影响。它不像比特币那样稳定,价格的起伏就像过山车一样。这既吸引了众多投资者的目光,也带来了巨大的投资风险和机遇。...

探索OP的多重含义:从动漫海贼王到游戏中的强大角色与技能

OP这个概念内涵丰富,根据不同的使用环境,可以指代各种不同的事物。在动漫界,它常与《海贼王》联系在一起;而在游戏世界里,它可能是一种特殊的称谓或技能。总体来说,OP给人一种既神秘又多变的感觉。 OP在...

NFT 艺术品交易平台:区块链技术赋予数字艺术品独特身份与价值

NFT艺术品交易平台属于一个新兴的领域。它为艺术品交易开辟了全新的方式。借助区块链技术,数字艺术品得以进行独特的标识。这样的标识确保了艺术品的唯一性和所有权。 数字艺术品与NFT 数字艺术品与传统的艺...

Uniswap在去中心化金融领域的重要性及其独特机制解析

在去中心化金融领域具有极其重要的地位。它依托于以太坊区块链,是一种自动化做市商协议。该协议让用户可以在以太坊上直接进行代币交换,无需依赖传统的中心化交易所。 理解机制 具备独特的机制。它依靠流动性...

淘宝变更管理规范,4 月 17 日起全面禁售区块链虚拟货币及相关产品

新版《淘宝禁售商品管理规定》将于4月17日正式生效。规定显示,本次禁售范围从“比特币、莱特币等互联网虚拟货币及相关产品”扩大至“基于区块链技术生成的虚拟货币等数字产品及衍生服务”。 调整后,新的具体禁...

海南省东方八所体育旅游区块链创新试验区项目正式落户,推动体旅产业新业态发展

海南省东方八所体育旅游区块链创新试验区项目正式落户,推动体旅产业新业态发展

3月20日,记者从海南省的东凡市的相关部门获悉,“海南省东方八个体育旅游业区区块链创新飞行员区”项目(以下简称这是创新飞行员区)最近被市政府批准,并在东佛()正式定居。该项目将在体育,风险投资和区...

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

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