thinkjs ---- nodejs rsa 加密解密

2020-06-13  本文已影响0人  无我_a50f

web 客户端

import JSEncrypt from 'jsencrypt/bin/jsencrypt.min';
const encrypted = new JSEncrypt();
encrypted.setPublicKey(`-----BEGIN PUBLIC KEY-----${window.ENV.publicKey}-----END PUBLIC KEY-----`);
encrypted.encrypt('加密的数据');

nodejs 服务端

const NodeRSA = require('node-rsa');
const decrypt = new NodeRSA('-----BEGIN RSA PRIVATE KEY-----私钥串-----END RSA PRIVATE KEY-----');
// 查看 https://github.com/rzcoder/node-rsa/issues/91
decrypt.setOptions({encryptionScheme: 'pkcs1'});
decrypt.decrypt('解密的字符串');

附录:
thinkjs 中间件中获取post 数据 middleware/payload.js

const _ = require('lodash');
const NodeRSA = require('node-rsa');
const decrypt = new NodeRSA(think.config('custom.privateKey'));
// 查看 https://github.com/rzcoder/node-rsa/issues/91
decrypt.setOptions({encryptionScheme: 'pkcs1'});

module.exports = (options, app) => {
    return async(ctx, next) => {
        if(ctx.header['content-type'] == 'application/json'){
            let postData = await new Promise((resolve, reject) => {
                try {
                    let str = "";
                    ctx.req.on("data", chunk => {
                        str += chunk;
                    });
                    ctx.req.on("end", data => {
                        console.log(str);
                        resolve(str);
                    });
                } catch (e) {
                    reject(e);
                }
            });

            _.forEach(JSON.parse(postData), (item, key) => {
                ctx.post(key, decrypt.decrypt(item, 'utf-8'));
            });
        }

        return next();
    }
}
上一篇下一篇

猜你喜欢

热点阅读