crypto.privateDecrypt在Windows上有效,但在ubuntu中不可用

时间:2019-06-12 05:41:02

标签: node.js windows ubuntu-16.04 cryptojs

我有一个代码,该代码读取privateKey(PEM格式)和要解密的加密文本。当我在Windows中运行代码时,一切正常,并且通过以下方式解密文本

let buffer = Buffer.from(encryptedData,'base64');
crypto.privateDecrypt(privatekey, buffer);

但是,当我在Ubuntu中运行相同的代码时,出现以下错误:

"'Passphrase required for encrypted key.TypeError: Passphrase ' +
  'required for encrypted key    at Object.privateDecrypt ' +
  '(internal/crypto/cipher.js:53:12)    at e1c2 ' +...

我在Windows和Ubuntu系统中都使用console.log(encryptedData,privatekey,buffer),它们是相同的。同样在私钥中,我没有使用密码短语。 有人知道为什么在Ubuntu中会出现这样的错误,而在Windows中却能正常工作吗?难道与实际上是.pam格式的privatekey格式有关,由于空白,Linux无法处理它?

编辑:

我的私钥具有这种格式

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIJrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIdq79fP1MZogCAggA
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDMX/L46fPKcSQkgXrwpLtqBIIJ
..

我基本上是通过

生成的
crypto.generateKeyPairSync('rsa', {
    modulusLength: 4096,
    publicKeyEncoding: {
      type: 'spki',
      format: 'pem'
    },
    privateKeyEncoding: {
      type: 'pkcs8',
      format: 'pem',
      cipher: 'aes-256-cbc',
      passphrase: ''
    }
  });

当我在互联网上查看更多内容时,在enter link description here上看到了一个示例 私钥的标题是“ ----- BEGIN RSA PRIVATE KEY -----”,实际上我可以在Ubuntu中运行该代码,并且不会发生错误。因此,看起来该问题与由于privateKeyEncoding中的“ pkcs8”类型而导致的标头更改有关。 我也注意到我在Windows上的节点版本是10.15.3,在ubuntu上是12.4。 可能还与节点版本更改有关吗?

1 个答案:

答案 0 :(得分:0)

我已经在Windows 10和Ubuntu 18.04上尝试了非常相似的方法。在我的情况下,我生成公共/私有密钥文件,先加密再解密。在两个平台上都运行良好。值得一试,看看它是否对您有用。节点版本为:Windows:10.15 Ubuntu 10.16。

text

您还可以尝试将密钥文件从Windows复制到Ubuntu(跳过“生成密钥文件”步骤)。这也对我有用。