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.