加密数据

const si = require('systeminformation');
const express = require('express');
const bodyParser = require('body-parser');
const crypto = require('crypto');
const uuidv4 = require('uuid/v4');
const detect = require('detect-port');
const exps = express();
const router = express.Router();
const cryptoAlgorithm = 'aes-256-ctr';
const uuidPath = path.join(__dirname + 'uuid.txt');


function encrypt(text,cryptoPW){
    try{
        var cipher = crypto.createCipher(cryptoAlgorithm,cryptoPW);
        var crypted = cipher.update(text,'utf8','hex');
        crypted += cipher.final('hex');
        return crypted;
    }
    catch(err){
        return "";
    }
}

function decrypt(text,cryptoPW){
    try{
        var decipher = crypto.createDecipher(cryptoAlgorithm,cryptoPW);
        var dec = decipher.update(text,'hex','utf8');
        dec += decipher.final('utf8');
        return dec;
    }
    catch(err){
        return "";
    }
}

router.use(function(req, res, next){
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization,merchant-id,pos-merchant-id");
    next(); //make sure we go to the next routes and dont stop here
});

router.route('/saveSecretKey').post(function(req, res){
    var merchantId = req.body.merchantId ? req.body.merchantId : "trialtest";
    var secretkey = req.body.secret;
    var appInstanceType = req.body.appType;
    si.networkInterfaces(function(data){
        var encryptPW =  data[0].mac + '-' + merchantId;
        var localSecretKey = encrypt(secretkey,encryptPW);
        fs.readFile(uuidPath,function(readErr,fileData){
            if(readErr || fileData.toString() == ""){
                fs.open(uuidPath,'w+',function(openErr, fd){
                    if(openErr){
                        var resData = {
                            successful: false,
                            failurereason:"License secret key is lost"
                        }
                        res.json(resData);
                    }
                    else{
                        var secretInfo = [{'instanceType':appInstanceType,'secretkey':localSecretKey}];
                        var secretInfoStr = JSON.stringify(secretInfo);
                        fs.writeFile(fd,secretInfoStr,function(writeErr){
                            if(writeErr) {
                                var resData = {
                                    successful: false,
                                    failurereason:"License secret key is invalid"
                                }
                                res.json(resData);
                            }
                            fs.close(fd,function(){
                                var resData = {
                                    successful:true
                                };
                                res.json(resData);
                                console.log('uuid writen');
                            })
                        })
                    }
                })
            }
            else{
                fs.open(uuidPath,'w+',function(openErr, fd){
                    if(openErr){
                        var resData = {
                            successful: false,
                            failurereason:"Can not open license secret key file"
                        }
                        res.json(resData);
                    }
                    else{
                        var secretKeyJson = JSON.parse(fileData.toString());
                        var isExisted = false;
                        for(var i in secretKeyJson){
                            if(secretKeyJson[i].instanceType == appInstanceType){
                                secretKeyJson[i].secretkey = localSecretKey;
                                isExisted = true;
                                break;
                            }
                        }
                        if(isExisted == false){
                            var secretInfo = {'instanceType':appInstanceType,'secretkey':localSecretKey};
                            secretKeyJson.push(secretInfo);
                        }
                        var secretInfoStr = JSON.stringify(secretKeyJson);
                        fs.writeFile(fd,secretInfoStr,function(writeErr){
                            if(writeErr) {
                                var resData = {
                                    successful: false,
                                    failurereason:"License secret key is invalid"
                                }
                                res.json(resData);
                            }
                            fs.close(fd,function(){
                                var resData = {
                                    successful:true
                                };
                                res.json(resData);
                                console.log('uuid writen');
                            })
                        })
                    }
                })
            }
        })
    });
});

router.route('/getSecretKey').post(function(req,res){
    console.log("************get key*****************************")
    var merchantId = req.body.merchantId ? req.body.merchantId : "trialtest";
    var appInstanceType = req.body.appType;
    si.networkInterfaces(function(sysdata){
        var encryptPW = sysdata[0].mac + '-' + merchantId;
        fs.readFile(uuidPath,function(err,data){
            if(err || data.toString() == ""){
                var resData = {
                    successful:true,
                    secret:""
                }
                console.log("readErorr");
                res.json(resData);
            }
            else{
                var secretkeyJson = JSON.parse(data);
                var theSecretKey = "";
                for(var i in secretkeyJson){
                    if(secretkeyJson[i].instanceType == appInstanceType){
                        theSecretKey = secretkeyJson[i].secretkey;
                        break;
                    }
                }
                var secretkeyStr = decrypt(theSecretKey.toString(),encryptPW);
                var resData = {
                    successful:true,
                    secret:secretkeyStr
                }
                res.json(resData);
            }
        })
    });
});

  

猜你喜欢

转载自www.cnblogs.com/yangshifu/p/10781129.html