Ajax传输数据加密

^常用于数据加密

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

    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();
}
CH2.Ajax 框架 支持简单加密(Base64/DES)和跨域(Jsonp) 如何以最快捷的方式直接调用服务器方法? 场景: 比如,服务器已有如下方法: namespace CH2 { class BLL{ User Login(string name,string password){ //balabala... } } } 如何写最少的 js 调用以上方法?也许你只需要写五行 js 代码: CH2.BLL.Login( {name: "caihaihua", password: "123456"} ,function(user){ alert('登录成功!'); } ,function(errormessage){ alert('登录失败!' + errormessage);} ); 步骤: 1.网站引用两个dll:CH2.Ajax.dll 和 Newtonsoft.Json.dll 2.把服务器方法添加属性 AjaxMethod。(例一) 3.添加一个一般处理程序,继承于 AjaxHandler<T> (T 为服务器方法的类名) 。(例二) 4.页面中引用两个js。(例三) 5.准备工作完成了。ajax 调用服务器方法,只需要在 js 中直接写: [namespace].[classname].[methodname](arguments,onsuccess,onfailed) 其中, arguments 为参数集合 onsuccess 为调用成功的回调函数 function(returndata) onfailed 为调用失败的回调函数(可选) function(errormessage) (例四) 例一: namespace CH2 { class BLL{ [AjaxMethod] // ←原有方法中添加这一属性 User Login(string name,string password){ } } } 例二: <%@ WebHandler Language="C#" Class="Handler" %> using CH2; public class Handler : AjaxHandler<BLL> // ←一般处理程序继承于AjaxHandler<BLL> { //此处不需要任何代码 } 例三: <script type="text/javascript" src="Ajax/Ajax.js"></script> // 配套的 js <script type="text/javascript" src="Ajax/Handler.ashx"></script> // 第 3 步中的一般处理程序(注意 url 中不带任何传参) 例四: <script type="text/javascript"> btn.onclick = function(){ // 你这样直接调用服务器方法: // CH2.BLL.Login(arguments,onsuccess,onfailed) CH2.BLL.Login( { //服务器方法需要的参数。key 为参数名,value 为对应的 json 对象 name: "caihaihua" ,password: "123456" } , function(data){ //onsuccess 方法。data 为服务器方法返回的结果(User) } , function(errmsg){ //onfailed 方法。 }); } </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值