node.js crypto.createPrivateKey信封例程:EVP_DecryptFinal_ex:不良解密

时间:2019-03-07 19:12:56

标签: node.js encryption cryptography

我遇到了一个泡菜,用户有一个publicprivate密钥对,它们是使用node.js v11.11.0中的crypto生成的。

private键受密码保护。我分发了public,并用它来加密用于AES加密(混合模式)的密钥。

可以从命令行(在Linux上为openssl)使用私钥就可以了。但是使用node.js时,我得到了错误bad decryptEVP DecryptFinal

该对是这样生成的:

crypto.generateKeyPair('rsa', {
        modulusLength: 4096,
        publicKeyEncoding: {
            type: 'spki',
            format: 'pem'
        },
        privateKeyEncoding: {
            type: 'pkcs8',
            format: 'pem',
            cipher: 'aes-256-cbc',
            passphrase: rand_pass
        }
    }, (err, pub, priv) => {
        if (err) {
            console.dir(err);
            return callback({ status: 500,
                              success: false,
                              message: err });
        }
        else {
            let key_file = crypto.createHash('sha256').update(id).digest('hex');
            let dir = global.keys;
            let pub_file = dir + key_file + '.pub';
            let prv_file = dir + key_file + '.priv';
            fs.writeFileSync(pub_file, pub);
            fs.writeFileSync(prv_file, priv);
            models.User.activate(id, pub_file, prv_file, function(reply) {
                return res.status(201).json(reply);
            });
        }
    });

当我读取私钥时,我得到:

-----BEGIN ENCRYPTED PRIVATE KEY-----

从命令行中(并提供密码),我得到:

RSA key ok
writing RSA key
-----BEGIN RSA PRIVATE KEY-----

但是,从node.js加载private键变成了一个问题。使用方法crypto.createPrivateKey(key),我无法加载私钥:

        var meta = query.meta; 
        var key_pem = fs.readFileSync(query.private_key, "ascii");
        if (key_pem === undefined) {
            return res.status(500).json({message: "internal error" });
        }

        var priv_key = crypto.createPrivateKey(key_pem, 'pem', 'pkcs8', rand_pass);

即使我尝试了各种编码(键)变体并且参数都相同,错误始终是相同的。

有人在不使用child_process而是仅使用本机方法的情况下成功地在Node.JS中成功使用了具有密码保护的私钥吗?

0 个答案:

没有答案