两种钱包之非确定性钱包(keystore管理私钥)
以太坊上有 2 种钱包:
- 非确定性钱包,也叫随机钱包,每个账户通过独立的随机数生成器创建,使用
keystore管理账户,没有助记词。 - 分层确定性钱包,也叫HD Wallet,每个账户通过固定的种子(seed)派生,使用
助记词管理所有账户。
本文讲解非确定性钱包,因为比较简单,下面会直接给出代码实现。下一篇文章会详细讲解分层确定性钱包,这个已经成为了行业标准,我会重磅介绍,并对比两种钱包的适用场景。
概念
随机数生成器:如Web3专题(一) 助记词和生成私钥、公钥、地址的基本原理所说,私钥是 256 位随机数字,需要使用安全的随机源生成,并经过一系列算法生成公钥、地址。
keystore:是一种文件格式,称为存储机制,主要目的是提供一种安全的方式来保管私钥,需要用户提供密码来解锁私钥。
通常,用 keystore 文件加密私钥等信息,来保护非确定性钱包。
使用 Go 语言开发一个非确定性钱包
- 需要引入的包
import ( "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" )
- 创建 keystore 对象,所有的私钥都由这个 keystore 对象管理。在这里,我们指定
./keystore文件夹保存账户。
特别提醒:
NewKeyStore方法只会加载目录,并监控目录的变化,不会创建账户,创建账户在下面第 3 步。NewKeyStore方法内部会自动扫描./keystore文件夹,并加载这个文件夹下的所有账户到 keystore 对象
// 第一个参数:./keystore 指定账户所在的文件夹
ks := keystore.NewKeyStore("./keystore", keystore.StandardScryptN, keystore.StandardScryptP)- 创建一个新账户
NewAccount会利用你指定的密码在./keystore目录下创建一个 json 文件,这个文件包含了加密过的私钥、公钥、地址等。
每执行一次NewAccount都会创建一个新账户。因此,如果只需要加载已有账户,则不需要执行这个方法。
所有的 json 文件都会存放在./keystore文件夹。
acc, err := ks.NewAccount("your password")
if err != nil {
panic(err)
}- 获取已创建的账户,会从./keystore 文件夹内拿到所有账户
ks对象是第2步创建的,会自动扫描./keystore 文件夹,拿到所有账户。
for _, acc := range ks.Accounts() {
fmt.Println("账户地址:", acc.Address.String())
}- 如果希望签名交易的话,可以使用钱包
for _, wallet := range ks.Wallets() {
// 这里每个钱包获得的第一个account和上面第4步的账户是一一对应的
_, _ = wallet.SignTx(wallet.Accounts()[0], nil, nil)
_, _ = wallet.SignData(wallet.Accounts()[0], "", nil)
}- 如果希望导出私钥,则需要密码才可以。
PASSWORD是上面第3步创建新账户设置的密码。
// 先把账户的 json 文件导出为[]byte
kjson, err := ks.Export(ks.Accounts()[0], PASSWORD, PASSWORD)
if err != nil {
panic(err.Error())
}
// 通过kjson+密码可以解密私钥
key, err := keystore.DecryptKey(kjson, PASSWORD)
if err != nil {
panic(err.Error())
}
privateKey := key.PrivateKey
fmt.Println(common.BytesToHash(crypto.FromECDSA(privateKey)).String())至此,我们已经学会了如何使用 Go 语言创建非确定性钱包。
你可能感兴趣的文章
-
加密钱包备份与使用全攻略:助记词、私钥、Keystore详解
本文将、详细讲解这五个关键名词的定义、功能、备份方法及使用场景,并以银行账户类比帮助理解,提供一份实用的钱包备份与使用教程…
2026-02-28 -
加密钱包中的助记词是什么?为何重要?如何保障加密钱包安全?一文解读
助记词是保护数字资产最简单却最有效的工具之一,这篇文章将带大家来解读它的含义,重要性,以及它如何保障您的加密钱包安全,下面就跟随小编一起来了解下吧…
2025-09-17 -
新型恶意软件SparkKitty窃取加密钱包助记词与截图等(附防范方法)
名为 SparkKitty 的恶意软件专门窃取受感染设备中的照片,目的是寻找加密钱包的助记词截图,该恶意软件针对 iOS 和 Android 双平台,通过潜入 Apple App Store 和 Google Pl…
2025-06-25 -
加密钱包的助记词丢失了怎么办?找回丢失助记词的工具及方法分析
加密钱包的助记词(也被称为种子短语)丢失了?不要惊慌,也许你还有找回的希望,今天,我们就针对这个话题,来一起研究一下恢复部分丢失的助记词的工具和方法…
2024-07-15 -
什么是keystore
Keystore文件是一种用于存储私钥的文件格式(通常为JSON格式),它通过用户自定义的密码进行加密,以提供一定程度的安全保护,但加密的强度主要取决于用户选择的密码的复杂…
2026-02-28 -
钱包中私钥、助记词、Keystore 是什么?它们和密码有什么关系
密码用于创建和导入钱包,而私钥是账户的唯一标识,不可修改,私钥和公钥成对出现,用于生成地址和签名交易,助记词是私钥的另一形式,方便记忆与导入账户,Keystore是加密后的私…
2024-09-22 -
虚拟货币钱包中的私钥/地址/助记词/keystore是什么?助记词有什么用?
虚拟货币钱包作为连接现实与加密世界的桥梁,其重要性日益凸显,那么,虚拟货币钱包中的私钥/地址/助记词/keystore是什么?助记词有什么用?这篇文章带大家了解,私钥、公钥、…
2025-05-08 -
区块链科普:什么是以太坊私钥储存(Keystore)文件?
这篇文章主要介绍了区块链科普:什么是以太坊私钥储存(Keystore)文件的相关资料,希望这篇关于什么是以太坊私钥储存(Keystore)文件的文章,能够帮助到各位朋友对区块链钱包…
2026-02-28 -
钱包科普:想要安全地保管资产,先要知道钱包的这些知识
这篇文章主要介绍了科普:想要安全地保管资产,先要知道钱包的这些知识的相关资料,希望这篇关于存储区块链资产的钱包的文章,能够帮助到各位新人投资者对钱包有一个深入的了…
2021-12-01










