我用一些命令personal.newAccount()
创建了几个帐户
并且创建的帐户被推送到列表中。
我想要做的是,由于安全原因,使用getAccount()
函数获得的公钥获取私钥。
我不想显示我的所有者地址和公钥,所以我想使用该功能从列表中获取地址。
web3.eth.getAccounts();
//["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
然后,我想通过以下方式获取具有该地址的私钥。
var publicKey = web3.eth.getAccounts();
var privateKey = extractPrivateKey(pulicKey);
使用web3有没有办法做到这一点?
有没有办法访问javascript文件上的密钥库?
我必须在javascript代码中使用sendTransaction()
函数,但它需要privateKey才能签名。现在我将privateKey存储为静态,我觉得这很危险。
我想知道在代码中隐藏我的所有者公钥和私钥。请让我知道如果有人有好主意。非常感谢。
答案 0 :(得分:0)
首先,这行代码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
函数的新参数,而无需将私钥存储在任何变量中。