美文网首页
nodeJS对接JAVA服务端遇到的https双向认证和DES加

nodeJS对接JAVA服务端遇到的https双向认证和DES加

作者: 勾起一抹笑容 | 来源:发表于2018-11-08 20:28 被阅读0次

    1、DES加解密:crypt.js

    var crypto=require('crypto');

    const key='12345678911111122222'.substring(0,8);//key值只有前八位有效

    exports.des={

           algorithm:{ecb:'des-ecb',cbc:'des-cbc' },

           iv:Buffer.alloc(0),//iv默认设定为0

           encrypt:function(plaintext){

                     var cipher =crypto.createCipheriv(this.algorithm.ecb,key,this.iv);

                          cipher.setAutoPadding(true)//default true

                   var ciph =cipher.update(plaintext,'utf8','base64');

                        ciph +=cipher.final('base64');

                       return ciph;

    },

    decrypt:function(encrypt_text){

           var decipher =crypto.createDecipheriv(this.algorithm.ecb,key,this.iv);

                 decipher.setAutoPadding(true);

          var txt =decipher.update(encrypt_text,'base64','utf8');

                txt +=decipher.final('utf8');

               return txt;

        }

    }

    2、调用加解密:descrypt.js

    var cryptUtil=require('./crypt.js');

    //加密

    var encrypt_text=cryptUtil.des.encrypt('你好你好');

           console.log(encrypt_text);//LT/5ZDgAYCzuuHAcF4n9vQ==

    var decrypt_text =cryptUtil.des.decrypt(encrypt_text);

         console.log(decrypt_text);//你好你好

    3、向java服务器发https请求

    var https = require('https');

    var fs=require('fs');

    var url=require('url');

    var crypto = require('crypto');

    var qs = require('querystring');

    var cryptUtil = require("./crypt");

    var cryptUtil = require("./descrypt");

    var  post_data={

           p:'NrqLkmeQmMBFrO6hmdfJr24hRaLuAq

           };

    var content =qs.stringify(post_data);

    var options = {

    /* hostname:url.parse( 'https://www.baidu.com').hostname,*/

           hostname:'www.baidu.com',

           port:19151,

            path:'/queryHomePage',

            method:'POST',

            key:fs.readFileSync('D:/home/nodes/key.pem'),

           cert:fs.readFileSync('D:/home/nodes/test.pem'),

            requestCert:true,//请求客户端证书

           rejectUnauthorized:false,

          headers: {

             'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'

             }

    };

    var req =https.request(options,function (res) {

    /* console.log('STATUS: ' + res.statusCode);

          console.log('HEADERS: ' + JSON.stringify(res.headers));*/

           res.setEncoding('utf8');

           res.on('data',function (chunk) {

     /* var decrypt_text = cryptUtil.des.decrypt(chunk,0);*/

        var chunkJson=JSON.parse(chunk).returnObject.toString();//向后台发请求返回的加密数据

    var decrypt_text =cryptUtil.des.decrypt(chunkJson);//调用解密方法对返回的数据进行解密

          console.log('BODY: ' +decrypt_text);

           });

       });

           req.on('error',function (e) {

          console.log('problem with request: ' + e.message);

       });

    // write data to request body

        req.write(content);

        req.end();

    相关文章

      网友评论

          本文标题:nodeJS对接JAVA服务端遇到的https双向认证和DES加

          本文链接:https://www.haomeiwen.com/subject/qeqgxqtx.html