【问题标题】:'EVP_DecryptFinal_ex:bad decrypt' error on nodejsnodejs上的'EVP_DecryptFinal_ex:错误解密'错误
【发布时间】:2020-04-30 11:21:30
【问题描述】:

执行 http POST 请求登录时,我从 nodejs 服务器收到此错误:

数字信封例程:EVP_DecryptFinal_ex:bad decrypt

我通过以下方式创建密钥:

openssl genpkey -out privateKEY.pem -aes256 -algorithm rsa -pkeyopt rsa_keygen_bits:4096 

openssl pkey -in privateKEY.pem -out publicKEY.pem -pubout 

我该如何解决这个问题?

这是代码:

var mysql = require('mysql');
var express = require('express');
var cors = require('cors');
const jwt = require('jsonwebtoken');
var sanitizer = require('sanitizer');
const fs = require("fs");

var app = express();
app.use(cors());

var connection = mysql.createConnection({
    host: '127.0.0.1',
    user: 'andrea',
    password: 'password',
    database: 'cars_market_place'
});

try{
    connection.connect();
}catch(err){
    console.error("Error:"+err);
}

const RSA_PRIVATE_KEY = fs.readFileSync('./privateKEY.pem');

function LinkMysql(query) {

    return new Promise(function(resolve, reject) {

        connection.query(query, function(err, result) {

            if (err)
                console.log('error: ' + err);

            resolve(result);

        });

    });

}  

app.post('/login', async function(request, response) { 

    let username = request.query.username;
    let password = request.query.password;

    if (username && password) {

        usernameS = sanitizer.sanitize(request.query.username);

        getUser(connection.escape(usernameS)).then( function(user){

            if (!user) {
                console.log("user not found:"+ username);
                response.status(401).json({ msg: 'No such user found', user: username });
            }

            if (user.password === password) {

                const jwtBearerToken = jwt.sign({}, RSA_PRIVATE_KEY, {
                    algorithm: 'RS256',
                    expiresIn: 120,
                    subject: user.username
                })

                response.json({ msg: 'ok', token: jwtBearerToken });
            } else {
                response.status(401).json({ msg: 'Password is incorrect' });
            }
        }).catch( (err) => {
            console.error('error='+err);
        });

    }

});

    function getUser(username){

        return new Promise((resolve, reject) => {

            query = 'SELECT * FROM `users` WHERE `users`.`username` = ' + username;
            console.log('query='+query);

            LinkMysql(query).then(function(data) {

                console.log("data="+data[0].username);
                console.table(data);
                resolve(data[0]);
                reject(null);

            }).catch((err)=> {
                console.log('Error:'+err);
            });

        });

    }

app.listen(8080);
console.log('server listing on 8080');

【问题讨论】:

    标签: node.js openssl jwt rsa


    【解决方案1】:

    我解决了将我在对象中传递的密码与 RSA_PRIVATE_KEY 一起添加到 jwt.sign 的问题。

    jwt.sign({},{key:RSA_PRIVATE_KEY, passphrase:pass}, {...});
    

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 2023-04-05
      • 2016-03-22
      • 2016-08-09
      • 2014-05-02
      相关资源
      最近更新 更多