NOdeJs Rest API 用私钥编码的响应
NOdeJs Rest API response encoded with private key
我已获得 public 和私钥以在 nodejs 中调用 restAPI。
两个密钥均采用清晰的 ASCII 格式。
我使用以下代码来加密我的消息:
(async () => {
// put keys in backtick (``) to avoid errors caused by spaces or tabs
// ENCRYPT
const publicKeyArmored = fs.readFileSync(publicKeyFile, {
encoding: 'utf8',
flag: 'r'
});
const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });
const encrypted = await openpgp.encrypt({
message: await openpgp.createMessage({ text: 'Hello, World!' })
, encryptionKeys: publicKey
// , signingKeys: privateKey // optional
});
console.log("Encrypted:", encrypted); // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
}
然而,当我尝试解密响应时,我发现的所有代码示例似乎都需要密码才能使用提供的私钥,但这没有以任何方式编码,它又是普通的 ascii,开头为:
-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)
lQO+BGHApmABCAC70QG0T3bh1MVRGKmY9cOM2NFEie2KXCLGXUPa+2B5JOnDypGX
msoLau8FtKIqvAVAYSsONlE4P4RcltyrOTHLMvWhu73ZTJIBu6GGkgM6bKOtu2Rp
/VbPylPIXrkA3A4s0089VGgmFqJul04lit2svLwxD31ZEIY3Ke3kd0dV0nM4npRO
EZUPR5Qr6KCwBsL+ZHbDuG2YrC7oKcnJTXcdszrF7+FLAwI8viZhJOXyagJRioXd
/H/IpauXyvejN22/eRjch9IRMSz+qh0avj9tcuuJ1k4sBQQukeoIoPwFe9Rb9TY2 .....
以下代码提示我需要密码,但此密钥似乎不需要密码:
async function decrypt() {
const privateKey = (await openpgp.key.readArmored([privateKeyArmored])).keys[0];
await privateKey.decrypt(passphrase);
const encryptedData = fs.readFileSync("encrypted-secrets.txt");
const decrypted = await openpgp.decrypt({
message: await openpgp.message.readArmored(encryptedData),
privateKeys: [privateKey],
});
console.log(decrypted.data);
}
那我该如何在没有密码的情况下使用它呢?
提前感谢您的圣诞精神和任何帮助!
您的私钥是ASCII armored
,因此可以以文本形式传输。在调用 gpg --dearmor
之后,您将获得二进制数据。私钥也可以使用密码加密存储,或者根本不加密(在第二种情况下你不需要调用 privateKey.decrypt()
)。要检查这一点,您可以使用命令 gpg --list-packets keyfile.asc
.
我已获得 public 和私钥以在 nodejs 中调用 restAPI。 两个密钥均采用清晰的 ASCII 格式。
我使用以下代码来加密我的消息:
(async () => {
// put keys in backtick (``) to avoid errors caused by spaces or tabs
// ENCRYPT
const publicKeyArmored = fs.readFileSync(publicKeyFile, {
encoding: 'utf8',
flag: 'r'
});
const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });
const encrypted = await openpgp.encrypt({
message: await openpgp.createMessage({ text: 'Hello, World!' })
, encryptionKeys: publicKey
// , signingKeys: privateKey // optional
});
console.log("Encrypted:", encrypted); // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
}
然而,当我尝试解密响应时,我发现的所有代码示例似乎都需要密码才能使用提供的私钥,但这没有以任何方式编码,它又是普通的 ascii,开头为:
-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)
lQO+BGHApmABCAC70QG0T3bh1MVRGKmY9cOM2NFEie2KXCLGXUPa+2B5JOnDypGX
msoLau8FtKIqvAVAYSsONlE4P4RcltyrOTHLMvWhu73ZTJIBu6GGkgM6bKOtu2Rp
/VbPylPIXrkA3A4s0089VGgmFqJul04lit2svLwxD31ZEIY3Ke3kd0dV0nM4npRO
EZUPR5Qr6KCwBsL+ZHbDuG2YrC7oKcnJTXcdszrF7+FLAwI8viZhJOXyagJRioXd
/H/IpauXyvejN22/eRjch9IRMSz+qh0avj9tcuuJ1k4sBQQukeoIoPwFe9Rb9TY2 .....
以下代码提示我需要密码,但此密钥似乎不需要密码:
async function decrypt() {
const privateKey = (await openpgp.key.readArmored([privateKeyArmored])).keys[0];
await privateKey.decrypt(passphrase);
const encryptedData = fs.readFileSync("encrypted-secrets.txt");
const decrypted = await openpgp.decrypt({
message: await openpgp.message.readArmored(encryptedData),
privateKeys: [privateKey],
});
console.log(decrypted.data);
}
那我该如何在没有密码的情况下使用它呢?
提前感谢您的圣诞精神和任何帮助!
您的私钥是ASCII armored
,因此可以以文本形式传输。在调用 gpg --dearmor
之后,您将获得二进制数据。私钥也可以使用密码加密存储,或者根本不加密(在第二种情况下你不需要调用 privateKey.decrypt()
)。要检查这一点,您可以使用命令 gpg --list-packets keyfile.asc
.