为什么需要 Keystore 文件
通过这篇文章理解开发HD 钱包涉及的 BIP32、BIP44、BIP39,私钥其实就代表了一个账号,最简单的保管账号的方式就是直接把私钥保存起来,如果私钥文件被人盗取,我们的数字资产将洗劫一空。
Keystore 文件就是一种以加密的方式存储密钥的文件,这样的发起交易的时候,先从Keystore 文件是使用密码解密出私钥,然后进行签名交易。这样做之后就会安全的多,因为只有黑客同时盗取 keystore 文件和密码才能盗取我们的数字资产。

Keystore 文件如何生成的
以太坊是使用对称加密算法来加密私钥生成Keystore文件,因此对称加密秘钥(注意它其实也是发起交易时需要的解密秘钥)的选择就非常关键,这个秘钥是使用KDF算法推导派生而出。

Demo Code:

<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>haha</title>
</head><script src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>
<script src="https://cdn.ethers.io/scripts/ethers-v4.min.js" charset="utf-8" type="text/javascript"></script>
<!--FileSaver来源:https://www.bootcdn.cn/FileSaver.js/-->
<script src="https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.js"></script><body><div><div><p>KeyStore导出</p><p>密码: <input type="text" id="password"></p><p>钱包地址: <span id="address"></span></p><p style="color: deepskyblue;"><span id="message"></span></p><div><button type="button" onclick="save_keystore()" ;> 创建钱包 </button></div></div><HR align=center width=100% color=#987cb9 SIZE=1><div><p>加载KeyStore文件</p><p>KeyStore:<input type="file" id="select_wallet_file" /></p><p>密码: <input type="text" id="recovery_password"></p><p>钱包地址: <span id="recovery_address"></span></p><p>私钥: <span id="recovery_privateKey"></span></p><p><span style="color: deepskyblue;" id="recovery_message"></span><span style="color: red;" id="recovery_error"></span></p><div><button type="button" onclick="select_submit_wallet()" ;> 获取私钥 </button></div></div></div><script type="text/javascript">function save_keystore() {const password = $("#password").val()const privateKey = ethers.utils.randomBytes(32);const wallet = new ethers.Wallet(privateKey);$('#address').html(wallet.address)$('#message').html('文件保存中...')wallet.encrypt(password).then(function (json) {const blob = new Blob([json], { type: "text/plain;charset=utf-8" });$('#message').html('文件保存成功!')// 使用了FileSaver.js 进行文件保存            saveAs(blob, "keystore.json");})}function select_submit_wallet() {const password = $("#recovery_password").val()const fileReader = new FileReader();const inputFile = document.getElementById('select_wallet_file')const file = inputFile.files[0];fileReader.readAsText(file);fileReader.onload = function (e) {var json = e.target.result;$('#recovery_message').html('正在加载KeyStore文件...')ethers.Wallet.fromEncryptedJson(json, password).then(function (wallet) {$('#recovery_message').html('加载KeyStore文件成功')$('#recovery_address').html(wallet.address)$('#recovery_privateKey').html(wallet.privateKey)}, function (error) {$('#recovery_error').html(error)});};}</script></html>
</body></html>

测试Demo 代码简陋,见谅!

参考文档
1. Tiny熊 使用ethers.js开发以太坊Web钱包2 - 账号Keystore文件导入导出
2. ethers.js 中文文档

使用ethers.js开发以太坊Web钱包 - 将私钥保存在客户端相关推荐

  1. 使用ethers.js创建以太坊HD钱包(生成BIP-039 + BIP-044钱包),在根据私钥、助记词找回钱包!

    一.什么是ethers.js ethers.js库旨在成为一个完整而紧凑的库,用于与以太坊区块链及其生态系统进行交互.它最初设计用于ethers.io,后来扩展为更通用的库.官方链接:https:// ...

  2. uni-app框架+app端+ethers.js库+以太坊开发+常见错误

    uni-app框架常见错误解决方案: app端如果不使用兼容的ethers.js库,uni-app框架会报错:      *                reportJSException > ...

  3. 在vue中使用web3.js开发以太坊dapp

    前端如何使用以太坊智能合约方法 这里讲的是前端与MetaMask之间的交互 文中涉及到的官方文档 web3.js 1.0中文手册 MetaMask官方文档 web3.js文件 链接:https://p ...

  4. web3.js链接以太坊并查询钱包u余额

    web3.js链接以太坊并查询钱包USDT余额 环境: 一.链接以太坊主网: 二.创建一个ABI 那么该如何获取ABI? 三.查询代码 四.输出结果 五.整体代码 环境: web3.js版本:6.14 ...

  5. 以太坊去中心化_开发以太坊去中心化投票应用程序的指南

    以太坊去中心化 by Timothy Ko 蒂莫西·高(Timothy Ko) 开发以太坊去中心化投票应用程序的指南 (A guide to developing an Ethereum decent ...

  6. 用Visual Studio开发以太坊智能合约

    2019独角兽企业重金招聘Python工程师标准>>> 区块链和以太坊 自从我熟悉区块链.以太坊和智能合约以来,一直失眠. 我一直在阅读,阅读和阅读,最后我能够使用一些工具,他们建议 ...

  7. 向别人网页注入js_区块链研究实验室 | Web3 .js基于以太坊的Javascript API

    web3.js是一个库集合,你可以使用HTTP或IPC连接本地或远程以太它节点进行交互. web3的JavaScript库能够与以太坊区块链交互. 它可以检索用户帐户,发送交易,与智能合约交互等. V ...

  8. java和以太坊交互_java类库web3j开发以太坊智能合约快速入门

    web3j简介 web3j是一个轻量级.高度模块化.响应式.类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成. 可以通过它进行以太坊 ...

  9. 使用hardhat开发以太坊智能合约-测试合约

    Web3工具网站[点我访问] 现已上线,欢迎使用,如有好的意见和建议也欢迎反馈. 本系列课程: 第一节:使用hardhat开发以太坊智能合约-搭建环境 第二节:使用hardhat开发以太坊智能合约-测 ...

最新文章

  1. oom 如何避免 高并发_【转载】如何避免OOM?看Greenplum的最佳实践
  2. 软件架构设计 温昱著 - 读书笔记
  3. 01,完全,多重,分组
  4. 锻造「明星产品」的艺术与科学,在于取舍【附乔布斯张小龙的产品设计原则】...
  5. python实现蜘蛛功能批量下载手机壁纸
  6. 反写规则-销售订单关闭后不允许出库 (销售订单-销售出库单)
  7. 简述python解释器的作用_什么是python解释器?
  8. linux 安装mysql5.7.12_Linux系统上安装mysql5.7.12
  9. 研究称:苹果开始感受到全球芯片短缺影响,但三星等受影响更大
  10. 雷军:电视机越大才越舒服!
  11. resnet101网络结构
  12. 7-28 猴子选大王 (20分)
  13. 华为外包软件公司集体罢工!
  14. zabbix基础·配置短信报警
  15. 网络运维python之NETCONF--协程gevent+ncclient,2分钟巡检几千台华为CE交换机
  16. python子图标题_python, 如何在subplot在总的图画上面加title?
  17. python绘制花朵图案_Python编写万花尺图案实例
  18. 用python爬取智联招聘
  19. 一文了解如何使用移动应用安全组件Soot和Flowdroid
  20. 计算机与现代教育的英语作文,雅思写作高分范文:电脑是否现代教育所必须?...

热门文章

  1. JS作用域 , 作用域链
  2. 物联网体系结构之四层架构
  3. WiFi模组无线技术,物联网智能家居互联互通,无线WiFi技术连接设备
  4. 云服务器安装MySQL数据库 ubuntu20
  5. RKE vs. RKE2:对比两种 Kubernetes 发行版
  6. 1G到5G之争:一部30年惊心动魄的移动通信史
  7. CSDN的一亩三分地
  8. 你知道中午十二点的食堂是什么样子吗?
  9. 《惢客创业日记》2018.10.20(周六) 作为主播给喜马拉雅FM的三个建议(上)
  10. 让DIV层位于flash对象之上