WEB3 |使用公共地址导入私钥

Posted

技术标签:

【中文标题】WEB3 |使用公共地址导入私钥【英文标题】:WEB3 | Import Private key with Public Address 【发布时间】:2018-06-27 04:13:25 【问题描述】:

我用一些命令创建了几个帐户personal.newAccount() 并且创建的帐户被推送到列表中。 我想要做的是,出于安全原因,使用getAccount() 函数获得的公钥获取私钥。

我不想显示我的所有者地址和公钥,所以我想使用该函数从列表中获取地址。

web3.eth.getAccounts(); 
//["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] 

然后,我想像下面这样获取具有该地址的私钥。

var publicKey = web3.eth.getAccounts();
var privateKey = extractPrivateKey(pulicKey); 

有没有办法使用 web3 来做到这一点? 有什么方法可以访问 javascript 文件上的密钥库吗? 我必须在 javascript 代码中使用 sendTransaction() 函数,但它需要 privateKey 才能签名。现在我将 privateKey 存储为静态的,我认为这很危险。 我想在代码中隐藏我的所有者公钥和私钥。如果有人有好主意,请告诉我。太感谢了。

【问题讨论】:

【参考方案1】:

首先,var publicKey = web3.eth.getAccounts(); 这行代码不会返回您的公钥,而是返回一个地址数组。

您可以使用 npm 包 keythereum。 它通过传递特定地址从您的密钥库文件中提取私钥。首先使用importFromFile函数导入,然后使用recover函数提取私钥。

看起来像这样:

var keystorePath = "/yourPathToTheKeystoreFile";

async function importPrivateKey(address) 
let methodName = ">>> [importPrivateKey]: ";
  try

      var keyObject = await keythereum.importFromFile(address, keystorePath);

      var privateKey = await keythereum.recover(password, keyObject);

      return privateKey;


    catch(e) 
      console.log(e);
      throw e;
    

现在您可以直接在任何其他函数中调用此函数,并将提取的私钥直接用作sendTransaction函数的新参数,而无需将私钥存储在任何变量中。

【讨论】:

以上是关于WEB3 |使用公共地址导入私钥的主要内容,如果未能解决你的问题,请参考以下文章

从文件文本中转换比特币私钥--逐行转换。

发送以太坊交易,Web3.js 没有源地址,但有源私钥?

为ssh设置公共私钥

将公共证书导入密钥库时出错

服务如何生成和使用公共和秘密 API 密钥?

运行公共以太坊节点是不是安全?