我在NodeJS中使用crypto
库生成RSA公钥/私钥对:
crypto.generateKeyPair(
"rsa",
{
modulusLength: 1024,
publicKeyEncoding: {
type: "pkcs1",
format: "pem",
},
privateKeyEncoding: {
type: "pkcs1",
format: "pem",
},
},
(err, publicKey, privateKey) => {
fs.writeFileSync("/home/dev/priv.pem", privateKey);
fs.writeFileSync("/home/dev/pub.pem", publicKey);
} );
现在,当我想使用Windows Cryptographic CNG API加载公钥时,它失败了。CryptDecodeObjectEx
返回0x 8009310 b(ASN 1错误标记值错误)。我使用this链接加载公钥。您知道我做错了什么吗?我应该以特定方式生成密钥吗?
1条答案
按热度按时间8xiog9wr1#
请将“pkcs 1”字符串替换为“spki”。该代码不需要RSA密钥,它需要SubjectPublicKeyInfo编码的密钥。
SPKI是在X.509标准中定义的,它允许ASN.1编码指示任何类型的密钥。例如,它还可以包含基于椭圆曲线的各种类型的密钥。在内部,它包含PKCS#1编码密钥,但在这种情况下,密钥类型的指示符-在这种情况下是RSA密钥-是二进制编码而不是文本编码。
备注:
BCRYPT_PAD_NONE
仅在您定义自己的方案或实现另一个现有方案时有用,这可能是最好的避免方法。如果您想加密更大的消息,请考虑混合加密(例如,加密AES密钥)。