如何从 64 字节原始十六进制格式的密钥生成 PEM 格式的密钥
How to generate a PEM-formatted Key from a 64Byte raw hex-formatted Key
我有以下问题:
从签名交易中重新创建 public 密钥后,我尝试用它加密一些有效负载。
但是,名为“crypto”的 node.js 模块需要 [=44 中的 pem 格式的密钥=]加密(密钥,有效载荷)函数。
我的问题:
如何从原始的十六进制编码密钥创建 pem 格式的密钥?
Here is the recreated 64 Byte public key:
9f9f445051e788461952124dc08647035c0b31d51f6b4653485723f04c9837adb275d41731309f6125c14ea1546d86a27158eec4164c00bab4724eed925e9c60
信息:
我知道,pem 格式密钥由 base64 编码数据、页眉和页脚组成。
-----BEGIN RSA PUBLIC KEY-----
BASE64 ENCODED DATA
-----END RSA PUBLIC KEY-----
我还发现在 base64 编码数据中存在以下 DER 结构:
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
所以唯一的问题是如何从得到原始十六进制编码密钥到 这个 DER 结构。
如有任何帮助,我将不胜感激!
问题已解决
感谢 Maarten Bodewes 以及他关于密钥是 secp256k1 而不是 RSA 的评论。
经过进一步研究,我终于设法 encrypt/decrypt 使用 secp256k1 密钥的非对称消息。
在 Cryptos ECDH class 的帮助下,我设法创建了一个密钥对象,然后将私钥分配给它。分配后,您可以使用 getPublicKey()
轻松派生出 public 密钥。所有参与者都将为自己创建一个密钥对象并将其私钥分配给它。然后他们分享他们检索到的 public 密钥(在我的例子中是通过共享媒体)。此外,我使用了一个名为 standard-ecies 的 npm-package,它提供了 ECIES 加密方案。
代码:
const crypto = require('crypto');
const ecies = require('standard-ecies');
var buffer = new Buffer("Hello World");
var ecdh = crypto.createECDH('secp256k1');
ecdh.setPrivateKey(privateKey);
var encryptedText = ecies.encrypt(ecdh.getPublicKey(), buffer);
var decryptedText = new Buffer(ecies.decrypt(ecdh, encryptedText));
我应该注意到这一点,因为 crypto 的加密函数 (link to the api-doc) 显然只适用于 RSA 密钥,而不适用于 secp256k1 密钥。
不管怎样,如果有人有类似的问题,我希望这个答案对您有所帮助!
我有以下问题:
从签名交易中重新创建 public 密钥后,我尝试用它加密一些有效负载。 但是,名为“crypto”的 node.js 模块需要 [=44 中的 pem 格式的密钥=]加密(密钥,有效载荷)函数。
我的问题:
如何从原始的十六进制编码密钥创建 pem 格式的密钥?
Here is the recreated 64 Byte public key: 9f9f445051e788461952124dc08647035c0b31d51f6b4653485723f04c9837adb275d41731309f6125c14ea1546d86a27158eec4164c00bab4724eed925e9c60
信息:
我知道,pem 格式密钥由 base64 编码数据、页眉和页脚组成。
-----BEGIN RSA PUBLIC KEY-----
BASE64 ENCODED DATA
-----END RSA PUBLIC KEY-----
我还发现在 base64 编码数据中存在以下 DER 结构:
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
所以唯一的问题是如何从得到原始十六进制编码密钥到 这个 DER 结构。
如有任何帮助,我将不胜感激!
问题已解决
感谢 Maarten Bodewes 以及他关于密钥是 secp256k1 而不是 RSA 的评论。
经过进一步研究,我终于设法 encrypt/decrypt 使用 secp256k1 密钥的非对称消息。
在 Cryptos ECDH class 的帮助下,我设法创建了一个密钥对象,然后将私钥分配给它。分配后,您可以使用 getPublicKey()
轻松派生出 public 密钥。所有参与者都将为自己创建一个密钥对象并将其私钥分配给它。然后他们分享他们检索到的 public 密钥(在我的例子中是通过共享媒体)。此外,我使用了一个名为 standard-ecies 的 npm-package,它提供了 ECIES 加密方案。
代码:
const crypto = require('crypto');
const ecies = require('standard-ecies');
var buffer = new Buffer("Hello World");
var ecdh = crypto.createECDH('secp256k1');
ecdh.setPrivateKey(privateKey);
var encryptedText = ecies.encrypt(ecdh.getPublicKey(), buffer);
var decryptedText = new Buffer(ecies.decrypt(ecdh, encryptedText));
我应该注意到这一点,因为 crypto 的加密函数 (link to the api-doc) 显然只适用于 RSA 密钥,而不适用于 secp256k1 密钥。 不管怎样,如果有人有类似的问题,我希望这个答案对您有所帮助!