欧意交易所资讯

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

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

qer1233个月前 (01-06)欧意交易所资讯107

如何导入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

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

相关文章

2021 百度 Create 大会:元宇宙中举办,发布多项前沿技术进展和应用

2021 百度 Create 大会:元宇宙中举办,发布多项前沿技术进展和应用

《传奇1.76怀旧版》网页版来袭!感受经典的血战! × IT之家了解到,只要在个人电脑、手机、可穿戴设备上登录“西让App”,就可以参加会议、购物、交流、观展。您还可以寻找少林寺,探索三星堆,参观元...

特斯拉股价大涨近9%推动马斯克身价创新高,市值突破1.1万亿美元

特斯拉股价大涨近9%推动马斯克身价创新高,市值突破1.1万亿美元

特斯拉的股价周一上涨了近9%,收盘价为350美元,市场价值超过1.1万亿美元,在美国大选后继续上涨,还推动了该公司的首席执行官埃隆·马斯克(Elon Musk)创造新的记录。它进一步巩固了他作为世界上...

CORE概念的多维应用:从企业管理到项目执行的核心力量

在我的理解中,CORE这个概念是多维的。它既可以指代中心、核心,也可以象征关键,并且广泛应用于众多领域。 CORE的基础概念 核心一词直译即中心,在众多体系结构中,它占据着最基础的地位。以企业管理为例...

虚拟货币上主网的意义与作用:解析主网上线的重要性

2.没有主网的币一般在以太坊上发行,依靠以太坊来转移资金和执行合约。用户的资产都在以太坊上。比如EOS,主网还没有完成,所以我们首先要在以太坊上发行一个叫EOS的代币。您购买的EOS资产将存储在以太坊...

欧意官网安卓APP下载指南:确保正版安全

欧意是一个较为知名的数字货币交易平台,它的官方 app 能给安卓手机用户带来便捷的交易体验。通过官网进行下载,就可以确保下载到的是正版软件,进而享受到安全稳定的服务。并且在交易过程中,还能够提供高效的...

5.15比特币以太坊行情分析及操作建议:涨跌预测、阻力支撑位解析

5.15 比特币今天能涨到52000吗?今天5.15比特币会跌至47000吗? 5.15 以太坊今天能涨到4300吗? 5.15比特币、以太坊最新行情走势分析及操作建议。 5.15以太坊会跌至3000...

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

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