IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 使用ethers.js开发以太坊Web钱包 - 将私钥保存在客户端 -> 正文阅读

[区块链]使用ethers.js开发以太坊Web钱包 - 将私钥保存在客户端

Web界面
为什么需要 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 中文文档

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 11:57:00  更:2021-09-03 11:57:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:40:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码