通过以太坊账户地址恢复私钥,并通过私钥恢复出对应公钥

本文介绍了如何从MetaMask导出私钥,并在Linux环境中使用JavaScript通过私钥计算公钥。利用web3.js或Solidity等工具,计算公钥的keccak256值,从而验证公钥的后20字节与以太坊地址的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先通过MetaMask导出私钥
在这里插入图片描述
然后在linux环境下中安装工具包(提前准备好nodejs环境)

npm install ethereumjs-wallet --save
npm install ethereumjs-util --save

然后新建test.js代码:

var Wallet = require('ethereumjs-wallet');
var EthUtil = require(
移动互联网时代,微信、支付宝等新型支付方式,冲击了传统的现金交易方式,移动支付,改变了人们的生活方式。而数字经济时代,顺应数据经济的发展,伴随着区块链技术而来的数字货币钱包也必将冲击资产管理方式。那么到底什么是数字货币钱包呢?01钱包的概念1.区块链钱包(BlockChain Wallet)区块链钱包(Block Chain Wallet):是密钥的管理工具,只包含密钥而不是确切的某个代币;钱包中包含了成对的私钥公钥,用户用私钥进行交易,从而证明了该用户拥有交易的输权;而输的交易信息则被存储在区块链中;用户在使用钱包时,你的Keystore, 助记词, 明文私钥,都是钱包;Keystore 是你加了”锁”的钱包,而助记词和明文私钥是完全暴露在外的钱包,没有任何安全性可言,所以在使用助记词和明文私钥时,一定要注意保密。2.钱包中的几个概念钱包一般包括:公钥私钥、助记词、Keystore、密码;本质上,钱包和钥匙是对应关系,固定的钥匙直接可以打开在网络上属于自己的钱包,但为了避免传输过程中信息泄密,密码学家又运用非对称加密技术,发明了公钥私钥公钥主要用于传输,私钥用于解密,简单解释就是,公钥是我们的银行卡,私钥就是该银行卡密码。私钥= Keystore+密码,私钥是由56位包含数字和区分大小写的字母组成,为方便资产交易,一般采用简单密码加上Keystore就能便捷转移我们额数字资产。助记词,是加密了的私钥,是为了便于导Keystore而发明的。02钱包的分类1.软件钱包和硬件钱包钱包在形态上,可以划分成为软件钱包和硬件钱包。软件钱包就是一个APP,装在我们的手机上或者是可以装在我们的电脑上面。硬件钱包就是专门有一个设备来存储这个私钥,涉及到签名的这些功能也在这个硬件设备上完成。2.冷钱包和热钱包按是否在线来划分,我们可以把钱包分为冷钱包和热钱包。硬件钱包不一定100%就是冷钱包。我们说的冷钱包是指私钥和签名这个动作是永远离线的。所以说冷钱包也有可能是以硬件形态来形成,也有可能是以一个软件来形成。因此很多钱包APP都支持冷热分离的操作。3.on-chain即发生在链上,给一个钱包地址发送数字货币,这笔交易在全网被广播、被确认、被打包进区块。称为on-chain交易;on-chain钱包需要自己保管私钥。4.off-chain通常经过交易所进行交易时off-chain的,本人私钥私钥由交易所托管。5.全节点钱包除了保存私钥外,全节点钱包还保存了所有区块的数据,著名的是bitcoin-core。6.中心化钱包顾名思义,就是在交易过程中通过某平台或银行机构等交易的钱包,如oklink提供的保险柜。7.轻钱包只保存跟自己相关的数据的去中心化钱包。03基本功能典型的数字资产钱包主要能完成哪些功能呢?第一是存掌管区块链资产的钥匙,我们称之为叫存私钥。第二它可以查询你的资产,根据你的这个私钥公钥还有地址,可以到区块链上查询到你有多少个比特币等数字货币。第三,就是从钱包转账时,会使用到转账过程中需要的签名,和向区块链网络广播的功能。
以太坊地址公钥是通过椭圆曲线加密算法生成的。在以太坊中,每个账户都有一个唯一的以太坊地址公钥以太坊公钥私钥也是通过椭圆曲线加密算法生成的。私钥用于对数据进行加密,公钥用于对数据进行解密。 下面是一个简单的示例,展示如何使用以太坊公钥私钥对数据进行加解密: 1. 生成公钥私钥以太坊中,可以使用任何一个以太坊钱包生成公钥私钥。例如,可以使用 MetaMask 钱包生成公钥私钥。 2. 加密数据 要加密数据,可以使用以太坊公钥私钥。以下是一个示例加密函数: ```solidity function encrypt(string memory message, address publicKey) public view returns (bytes32) { bytes32 encrypted = keccak256(abi.encodePacked(message, publicKey)); return encrypted; } ``` 在这个函数中,我们使用 keccak256 哈希函数对消息和公钥进行加密。 3. 解密数据 要解密数据,可以使用以太坊公钥私钥。以下是一个示例解密函数: ```solidity function decrypt(bytes32 encrypted, address privateKey) public view returns (string memory) { bytes32 decrypted = keccak256(abi.encodePacked(encrypted, privateKey)); return string(decrypted); } ``` 在这个函数中,我们使用 keccak256 哈希函数对加密后的消息和私钥进行解密。 请注意,这只是一个简单的示例,实际上在以太坊中使用公钥私钥进行加解密需要更多的安全措施和实现细节。建议在使用以太坊公钥私钥进行加解密时,始终遵循最佳实践和安全标准。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值