gpt4 book ai didi

javascript - node-rsa : Encoding too long, 使用以太坊账户的公钥

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:17 26 4
gpt4 key购买 nike

我有以下问题:

主要目标是使用以太坊帐户的公钥(形成 keystore 文件)对某些有效负载进行非对称加密,然后使用相应的私钥(也来自同一 keystore 文件)对其进行解密。

我已经在这个包的帮助下从帐户地址中提取了私钥:keythereum-node

这会从特定帐户地址生成以下十六进制格式的私钥:私钥:6dc5aeb2cf14c748da683d1c16491d5b468b5bb1eea3f98c511b6371fdcfb05f

我设法从帐户中获取公钥,方法是首先使用私钥签署随机选择的字符串,然后使用签名接收公钥(msgHash,v,r,s)。为此,我使用了 ethereumjs-util 包中的 ecrecover-method。

这会产生以下十六进制格式的公钥:公钥:9f9f445051e788461952124dc08647035c0b31d51f6b4653485723f04c9837adb275d41731309f6125c14ea1546d86a27158eec4164c00bab4724eed92 5e9c60

到目前为止一切顺利。现在我有两个 key (公钥 512 位和私钥 256 位长)。现在我尝试通过传递 pem 格式的 base64 编码的公钥来生成 nodeRsa key (node-Rsa 包)。

获取私钥:

var keyObject = await keythereum.importFromFile(address, keystorePath).then(keyObject => {
return keyObject;
}).catch(err => {
console.log(err);
});

var privateKey = await keythereum.recover(password, keyObject).then(privateKey => {
return privateKey;
}).catch(err => {
console.log(err);
});

return privateKey;

获取公钥:

var sig = await web3.eth.accounts.sign("Hello World", privateKey);
var msgHash = sig.messageHash;
var r = sig.r;
var s = sig.s;
var v = sig.v;
msg = recover.toBuffer(msgHash);
var publicKey = recover.ecrecover(msg,v,r,s);

使用 rsa-node 生成 rsa-key:

var key = new nodeRsa("-----BEGIN RSA PUBLIC KEY-----\n" +
"n59EUFHniEYZUhJNwIZHA1wLMdUfa0ZTSFcj8EyYN62yddQXMTCfYSXBTqFUbYai\n" +
"cVjuxBZMALq0ck7tkl6cYA==\n" +
"-----END RSA PUBLIC KEY-----", "pkcs1-public");

执行脚本后抛出以下错误:

{ InvalidAsn1Error: encoding too long
at newInvalidAsn1Error (/Users/milandavidovic/node_modules/asn1/lib/ber/errors.js:7:13)
at Reader.readLength (/Users/milandavidovic/node_modules/asn1/lib/ber/reader.js:103:13)
at Reader.readSequence (/Users/milandavidovic/node_modules/asn1/lib/ber/reader.js:136:16)
at Object.publicImport (/Users/milandavidovic/node_modules/node-rsa/src/formats/pkcs1.js:122:14)
at Object.detectAndImport (/Users/milandavidovic/node_modules/node-rsa/src/formats/formats.js:65:48)
at NodeRSA.module.exports.NodeRSA.importKey (/Users/milandavidovic/node_modules/node-rsa/src/NodeRSA.js:183:22)
at new NodeRSA (/Users/milandavidovic/node_modules/node-rsa/src/NodeRSA.js:73:18)
at getPublicKeyFromSignature (/Users/milandavidovic/masterthesis/Scripts/DeployContract.js:280:15)
at <anonymous> name: 'InvalidAsn1Error', message: 'encoding too long' }
(node:1101) UnhandledPromiseRejectionWarning: InvalidAsn1Error: encoding too long
at newInvalidAsn1Error (/Users/milandavidovic/node_modules/asn1/lib/ber/errors.js:7:13)
at Reader.readLength (/Users/milandavidovic/node_modules/asn1/lib/ber/reader.js:103:13)
at Reader.readSequence (/Users/milandavidovic/node_modules/asn1/lib/ber/reader.js:136:16)
at Object.publicImport (/Users/milandavidovic/node_modules/node-rsa/src/formats/pkcs1.js:122:14)
at Object.detectAndImport (/Users/milandavidovic/node_modules/node-rsa/src/formats/formats.js:65:48)
at NodeRSA.module.exports.NodeRSA.importKey (/Users/milandavidovic/node_modules/node-rsa/src/NodeRSA.js:183:22)
at new NodeRSA (/Users/milandavidovic/node_modules/node-rsa/src/NodeRSA.js:73:18)
at getPublicKeyFromSignature (/Users/milandavidovic/masterthesis/Scripts/DeployContract.js:280:15)
at <anonymous>
(node:1101) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1101) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

我不明白,为什么编码应该太长。我多次检查了该字符串。

如果有人有线索,请随时写下答案或建议。

最佳答案

经过进一步研究,我发现 PEM 格式的 key 不仅仅包含带有页眉和页脚的 Base64 编码原始 key 。就我而言,我必须提供包含以下数据的 DER 结构:

    RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}

所以我上面的“pem-formatted” key 不正确。另外,我的 key 不是 RSA-Key,而是 secp256k1-Key

关于javascript - node-rsa : Encoding too long, 使用以太坊账户的公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57428308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com