【发布时间】:2019-12-20 19:22:27
【问题描述】:
我有以下问题:
从签名交易重新创建公钥后,我尝试用它加密一些有效负载。 然而,名为“crypto”的 node.js-模块在 publicEncrypt(key, payload) 函数中需要一个 pem 格式的密钥。
我的问题:
如何从原始十六进制编码的密钥创建 pem 格式的密钥?
这是重新创建的 64 字节公钥: 9f9f445051e788461952124dc08647035c0b31d51f6b4653485723f04c9837adb275d41731309f6125c14ea1546d86a27158eec4164c00bab4724eed925e9c60
信息:
我知道,pem-format-key 由 base64 编码数据、页眉和页脚组成。
-----BEGIN RSA PUBLIC KEY-----
BASE64 ENCODED DATA
-----END RSA PUBLIC KEY-----
我还发现在 base64 编码数据中存在以下 DER 结构:
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
所以唯一的问题是如何从原始十六进制编码密钥到这个DER结构。
我将不胜感激!
【问题讨论】:
-
您确定这是 RSA 公钥吗?似乎更合乎逻辑的是,这是一个 secp256k1 公钥,用于例如比特币,由两个 256 位值组成,表示曲线上的一个点。请注意,您的值不是奇数,并且由于素数是奇数,并且由于将两个奇数相乘会产生奇数……嗯,奇怪的是模数不是奇数,这就是我想说的…… .
-
感谢您的快速评论。嗯,你是对的,它是一个 secp256k1 公钥。我一开始并没有真正考虑到这一点。我有两个密钥,公钥和私钥,它们是 secp256k1。但是它们仍然可以用于对消息应用非对称加密,对吗?所以唯一的问题是我不能以 PEM 格式提供它们..
标签: node.js cryptography rsa public-key-encryption pem