node.js crypto.createPrivateKey конверты подпрограммы: EVP_DecryptFinal_ex: плохая расшифровка - PullRequest
0 голосов
/ 07 марта 2019

Я столкнулся с рассолом, у пользователя есть пара ключей public и private, сгенерированная с помощью crypto из node.js v11.11.0.

Ключ privateПароль защищен.Я распространяю public и использую его для шифрования шифровальных ключей для шифрования AES (гибридный режим).

Закрытый ключ можно использовать из командной строки (openssl в Linux) просто отлично.Но с node.js я получаю ошибки bad decrypt и EVP 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-----

Однако загрузка ключа private из node.jsпревращается в проблему.Используя метод 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);

Ошибка всегда одна и та же, хотя я пробовал с различными вариантами кодирования (ключ) и параметры идентичны.

Кто-нибудь успешно использовал закрытые ключи с защитой паролем в Node.JS, не используя child_process, а только собственный метод?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...