ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

eos 密钥管理实战:使用 cleos wallet keys 与 private_keys 列出钱包公私钥对

eos 密钥管理实战:使用 cleos wallet keys 与 private_keys 列出钱包公私钥对 区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载本指南以 docs/02_cleos/02_how-to-guides/how-to-list-all-key-pair.md 为骨架结合 programs/cleos/main.cpp 与 plugins/wallet_plugin 的源码实现深入讲解在 EOSeos 开源智能合约平台开发环境中如何用cleos钱包命令列出公钥、私钥以及公私钥对。读完本文你将掌握cleos wallet keys、cleos wallet private_keys两条命令的完整用法、输出格式、底层调用链与安全边界能够安全地在开发、测试与生产环境中核对密钥。背景公钥/私钥对与 cleos 钱包模型在 EOS 区块链中每一对密钥由两部分组成私钥private key用于对交易签名是账户权限的最终凭证必须严格保密公钥public key由私钥通过椭圆曲线算法推导而来用于验证签名可以公开。这些密钥对存放在由keosdkey store daemon密钥存储守护进程管理的钱包wallet中。cleos作为命令行客户端通过 JSON-RPC 与keosd通信来执行钱包操作。钱包本身由密码password加密保护钱包创建时keosd返回一个密码后续解锁钱包、导出私钥都必须提供该密码。相关钱包操作命令的完整清单可参考 cleos 钱包命令参考。开始前的准备按照原文档的要求执行本指南前需要满足以下条件安装当前支持的cleos版本cleos随 EOSIO 软件一同分发安装 EOSIO 即包含cleos参见 安装指南。理解公私钥对的概念清楚什么是公钥、什么是私钥以及它们在签名验证中的作用。确保钱包服务可用keosd正在运行且本地存在已创建的钱包可通过cleos wallet create创建详见 如何创建钱包。第一步解锁钱包密钥列表操作要求钱包处于解锁状态。默认钱包名为default解锁命令如下cleos wallet unlock对于命名钱包使用-n/--name指定钱包名并通过--password传入创建钱包时返回的密码cleos wallet unlock -n my_wallet --password PW5Ji6JUrLjhKAVn68nmacLxwhvtqUAV18J7iycZppsPKeoGGgBEw成功时输出Unlocked: my_wallet解锁命令的 CLI 定义位于 programs/cleos/main.cpp它接受-n/--name钱包名默认default与--password可选若省略则交互式提示输入随后调用wallet_unlockRPC 完成解锁。提示也可以先运行cleos wallet list查看当前已打开的钱包及其锁定状态——输出中带*的钱包表示已解锁见 wallet_manager.cpp 的list_wallets()实现。第二步列出所有公钥列出所有已解锁钱包中的全部公钥cleos wallet keys该命令无位置参数、无选项参见 wallet keys 命令参考输出为 JSON 数组例如[ EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV, EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr ]cleos wallet keys只输出公钥不暴露任何私钥信息因此适合在需要确认哪些公钥可用于签名、核对账户权限对应的公钥等场景使用。第三步列出指定钱包的全部公私钥对列出某个已解锁钱包中公私钥对同时输出公钥与对应的私钥cleos wallet private_keys该命令的选项如下参见 wallet private_keys 命令参考选项说明-n, --nameTEXT要列出密钥的钱包名称缺省为default--passwordTEXT创建钱包时返回的密码wallet create的返回值指定钱包名并显式传入密码的完整形式cleos wallet private_keys -n my_wallet --password PW5Ji6JUrLjhKAVn68nmacLxwhvtqUAV18J7iycZppsPKeoGGgBEw输出为公私钥对组成的 JSON 数组形如[ [ EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV, 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 ] ]注意private_keys会同时输出公钥与私钥且除了解锁状态外还必须再次提供钱包密码这是list_keys流程中的强制校验见下文源码分析请务必在可信环境中执行。底层原理两条命令的完整调用链CLI 层子命令与回调两条子命令在 programs/cleos/main.cpp 中定义cleos wallet keys无参数回调中调用wallet_public_keysRPC并打印返回的 JSONto_pretty_string美化输出cleos wallet private_keys接受-n/--name与--password回调中先调用prompt_for_wallet_password(wallet_pw, wallet_name)确保拿到密码命令行未提供时交互式输入再调用wallet_list_keysRPC。RPC 层wallet_api_plugin 端点注册RPC 端点注册于 plugins/wallet_api_plugin/wallet_api_plugin.cppwallet_list_keys(name, pw)→wallet_manager::list_keys参数为钱包名与密码wallet_public_keys()→wallet_manager::get_public_keys无参数。该插件注册在http_plugin之上默认监听127.0.0.1:8900。若keosd配置为对外监听非 loopbackwallet_api_plugin会强制要求 HTTPS 并打印安全告警见 wallet_api_plugin.cpp因为钱包 RPC 承载着私钥导出等高敏感操作。服务端实现wallet_manager核心逻辑在 plugins/wallet_plugin/wallet_manager.cppget_public_keys()L138-L151遍历所有已加载的钱包仅对未锁定的钱包调用list_public_keys()合并其公钥若没有任何钱包已解锁直接抛出wallet_locked_exception。这正是cleos wallet keys只聚合已解锁钱包的原因——锁定钱包的密钥无法被读取。list_keys(name, pw)L126-L136按名字查找钱包钱包不存在抛wallet_nonexistent_exception钱包被锁定抛wallet_locked_exception随后调用check_password(pw)校验密码校验通过后才返回wallet-list_keys()的完整公私钥映射。这就是为什么private_keys必须重复输入密码——它是解锁校验之外的第二道防线。钱包存储实现soft_wallet默认的软件钱包soft_wallet实现位于 plugins/wallet_plugin/wallet.cpplist_keys()L381-L385若钱包已锁定则抛异常否则直接返回内存中解密后的_keys映射mappublic_key_type, private_key_typelist_public_keys()L387-L392同样要求未锁定只提取键公钥返回check_password()L363-L371对密码做fc::sha512哈希用其解密钱包文件中的cipher_keys并校验 checksum从而验证密码正确性。私钥在磁盘上以加密形式保存只有解锁并传入正确密码后才能导出明文这一设计保证了即使钱包文件泄露攻击者也无法直接获取私钥。密钥格式公钥通常以EOS前缀的 base58 编码形式展示私钥以 WIFWallet Import Format形式展示如5K...开头若密钥为 R1 曲线如使用cleos wallet create_key创建 K1/R1 类型密钥私钥则以PVT_R1形式表示。安全警告切勿在生产环境泄露私钥原文档在结尾给出明确警告本文再强调一遍小心绝对不要在真实生产环境中输出你的私钥。cleos wallet private_keys会在终端明文打印私钥因此在使用时务必注意只在本机可信终端执行避免在共享主机、录屏环境或日志会被采集的环境中运行不要让私钥进入 shell 历史可通过交互式输入密码避免在命令行参数中书写密码执行后建议清理终端记录私钥即权限任何持有私钥的人都能代表对应权限签名交易、转移资产泄露私钥等于放弃对应账户权限优先用公钥核对多数场景如配置节点、绑定账号权限只需公钥应优先使用cleos wallet keys仅在确实需要导出私钥如备份、迁移钱包到其他机器时才使用cleos wallet private_keys生产环境建议使用硬件钱包或安全元件仓库中的yubihsm_wallet与se_wallet安全元件钱包见 plugins/wallet_plugin/yubihsm_wallet.cpp 与 plugins/wallet_plugin/se_wallet.cpp实现了同样的list_keys()接口私钥保存在硬件中、永不导出明文可显著降低私钥泄露风险。常见问题排查Wallet not found指定的钱包名不存在检查拼写或用cleos wallet list查看已有钱包Wallet is locked钱包处于锁定状态先执行cleos wallet unlockYou dont have any unlocked wallet!执行cleos wallet keys时所有钱包均为锁定状态源码见 wallet_manager.cpp先解锁再重试Invalid password for walletprivate_keys传入的密码错误请核对创建钱包时返回的密码源码见 wallet.cppUnable to connect to keosdkeosd未启动或--wallet-url指定的端口不对默认钱包 RPC 地址为http://127.0.0.1:8900。总结命令用途是否输出私钥是否需要密码cleos wallet unlock解锁钱包前置步骤否是cleos wallet keys列出所有已解锁钱包的公钥否否cleos wallet private_keys列出指定已解锁钱包的公私钥对是是两条密钥查看命令覆盖了从核对公钥到导出私钥的完整需求keys面向日常开发与权限核对private_keys面向备份与迁移。理解其底层调用链cleos → keosd RPC → wallet_manager → soft_wallet后你不仅能熟练使用命令还能在遇到锁定、密码错误等问题时快速定位原因。最后再次强调私钥只在必要时导出且绝不在生产环境中暴露。赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐拔掉Windows AI的刺RemoveWindowsAI彻底清理指南拔掉Windows AI的刺RemoveWindowsAI彻底清理指南 任务管理器里那个偷偷吃 CPU 的 Copilot 进程是不是又烦到你了Remov区块链EOSIO cleos wallet create_key 命令详解在钱包内生成 K1 / R1 密钥对EOSIO cleos wallet create_key 命令详解在钱包内生成 K1 / R1 密钥对 本篇技术指南围绕 EOSIO 节点工具集 cleos区块链EOSIO cleos wallet 命令完全指南本地钱包的创建、解锁与密钥管理EOSIO cleos wallet 命令完全指南本地钱包的创建、解锁与密钥管理 导读 cleos wallet 是 EOSIO 节点工具链中用于与本地钱包区块链创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表