Ajax传输数据加密

  • Post author:
  • Post category:其他




^常用于数据加密

常常使用日期与数据进行异或

    c= a ^ b  可以推出 a =  b ^ c. (常用于加密)
    异或的运算方法是一个二进制运算: 两者相等为0,不等为1.

使用进制形式 防止服务器不是utf8无法解析中文

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/querystrings.js"></script>

</head>
<body>
  
    <script>
        var str="一爱我的祖国i like javascript";
        一的Unicode 编码为19968
        // var str="一";
        //一 异或之后是19979 下
      var n=new Date().getDate();
        var arr=[];
        for(var i=0;i<str.length;i++){
            arr.push(str.charCodeAt(i)^n);
        }
        var a=new Uint16Array(arr);
        console.log(a);
       /*  console.log(a[0]);
        console.log(String.fromCharCode(a[0])); */
        
      var xhr=new XMLHttpRequest();
        xhr.addEventListener("load",loadHandler);
        xhr.open("POST","http://127.0.0.1:4002/a/");
        // xhr.setRequestHeader('Content-type','application/content');
        xhr.send(a);

        function loadHandler(e){
            if(xhr.readyState===4&&xhr.status<400){ 
               
            }
        }  
     
    </script>
</body>
</html>

后端代码实现

var http=require("http");
var querystring=require("querystring");
var req,res,data,type;

init();
function init(){
    var server=http.createServer(createServer);
    server.listen(4002,"127.0.0.1",listenHandler);
}

function createServer(_req,_res){
    req=_req;
    res=_res;
    res.writeHead(200,{
        "content-type":"text/plain;charset=utf-8",
        "Access-Control-Allow-Origin":"*",
        "Access-Control-Allow-Headers":"Content-type",
    });
   
    type=req.url.includes("?") ? req.url.split("?")[0].replace(/\//g,"") : req.url.replace(/\//g,"");
    req.on("data",dataHandler);
    req.on("end",endHandler);
}
function listenHandler(){
    console.log("开启服务");
}

function dataHandler(_data){
 var str="";
 // -------16位二进制解析
   var n=new Date().getDate();
   //进制数据是两个一位 且是颠倒的
   for(var i=0;i<_data.length;i+=2){
    //如果某个字符串不够指定长度,会在头部或尾部补全。
   //padStart()用于头部补全,padEnd()用于尾部补全。
    var a=_data[i+1].toString(16).padStart(2,"0");
    var b=_data[i].toString(16).padStart(2,"0");
    var s=parseInt(a+b,16);
    console.log(s);
   
       str+=String.fromCharCode(s^n);
   
   }
   console.log(str);
    data=_data+"";

}

function endHandler(){
    if(req.method.toUpperCase()==="GET"){
        data=req.url.includes("?") ? req.url.split("?")[1] : "";
    }
   
    try{
        data=JSON.parse(data);
    }catch(e){
        data=querystring.parse(data);
    }
    var obj=data;
    //  var obj={a:data.a,b:data.b};
    if(type==="a"){
        // obj.sum=Number(data.a)+Number(data.b)
        res.write(querystring.stringify(obj));
    }else if(type==="b"){
        // obj.sum=Number(data.a)*Number(data.b)
        res.write(querystring.stringify(obj));
    } 
    res.end();
}



版权声明:本文为weixin_44226088原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。