【发布时间】:2024-03-09 09:00:01
【问题描述】:
我一直在尝试在 AWS Lambda 上生成 RSA 密钥对,以替换当前在 PuTTYgen 上手动生成的密钥。 PuTTYgen 上生成的密钥为 RSA 类型,长度为 2048,生成的示例密钥(无注释)如下 -
---- BEGIN SSH2 PUBLIC KEY ----
Comment: ""
AAAAB3NzaC1yc2EAAAABJQAAAQEAjloNCA4mycem+WTb49zUhYK7aRmg1uuorUvD
7GzE97C9EmmhUrVbp4d5dWF8zkT2sh5mRFrAnsSogxEtCzvh59mzbqUj+3Xw+xqJ
DMrHmnT8XKIGep++v3e+SV7RLio06ymp0H7zyHhbxLhZEnpGEKwkXmY53+RSUF7s
wfmvxS5mCo7677lbIZxGvvx65tT5as5m+ng7tKlqDAliuPl2vslyFhQw9B49cvOx
Z+UekK2iHD+DNCMQyxEelOru9YMwRozOwgtWPEyHcLinonAn2fUne28POsT3zXbv
rW10hkGH5JIHzGUoPxP6N7RRCnSN/NgS8rrHs51Skvhl0WzV6w==
---- END SSH2 PUBLIC KEY ----
现在我一直在尝试使用以下代码在 NodeJS lambda 上复制相同的内容 -
const generation = util.promisify(crypto.generateKeyPair);
const result = await generation('rsa',{
modulusLength: 2048,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
}
});
console.log(result['publicKey']);
console.log(result['privateKey']);
在执行这个 lambda 时,生成的公钥看起来像这样 -
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnF1VDHq0vu5iL0nkbum8
cVzdhxiqmR6XcZbcsilF+Se6tlS9VAbN8QTTLdqwhJ5Dw7DvBGUXpCqUIqyT5IU5
wjQGnWHAWhPmalAgYWDwwdiOxxgd6NnNRR2Q5P4PSruxvFG7BtiSKGXSZpMzTIyZ
sXajEY2vhkf77bMEgzJhpXGAvzZsGEDi9jni8FCabVH6jvXh/svpmoCxwhQY1HHh
9RksscuAfllMwOE4uiQvfq6CpPNJUwU4kWtiaAtgX26nnPvqaUX52xMuYBrWQI2m
vUiXuxynqnrVSAFt/QY/0lMKRgnzwkq6YTIf8PeMQQA6TVQbtGN+j0MFQJDxF2/l
dQIDAQAB
-----END PUBLIC KEY-----
据我对 RSA 密钥的了解,第一行和最后一行应该没有任何区别,因为它们基本上是 cmets。但是我看到 PuTTYgen 键包含大约 5 和 1/2 行内容,而 NodeJS 键包含 6 行以上的内容。为什么两者的长度都是2048,为什么会有区别?
谢谢。
【问题讨论】:
-
...第一行和最后一行不应该有任何区别,因为它们基本上是 cmets... 是的,但它们确实告诉您有关钥匙。不幸的是,有许多 RSA 格式是为特定目的量身定制的。第一个特定于 SSH,然后第二个更普遍接受,但两者都包含基本相同的信息。
-
这能回答你的问题吗? RSA Public Key format
-
我查看了这两个链接,我想我理解不同 RSA 格式的前提。我找到了一个模块 - 'sshpk',它应该有助于将我的密钥转换为所需的格式。如果成功将分享代码,感谢您的帮助。
标签: javascript aws-lambda cryptography rsa ssh-keys