162 lines
5.0 KiB
JavaScript
162 lines
5.0 KiB
JavaScript
var SAFETOCKEN="Safe-Tocken";//for RSA key cookie
|
|
var encryptAxes = function(axes){
|
|
RSAUtils.setMaxDigits(1024);
|
|
var safeTocken = getCookie(SAFETOCKEN);
|
|
if(safeTocken=="" || safeTocken ==''){
|
|
throw new Error("Cannot read Cookie '"+SAFETOCKEN+"' values,System need run RSAData() again!");
|
|
return ;
|
|
}
|
|
var safe_tocken = safeTocken.split(",");
|
|
var pubexp = safe_tocken[1];
|
|
var priexp = safe_tocken[0];
|
|
var modulus = safe_tocken[2];
|
|
var key = RSAUtils.getKeyPair(safe_tocken[1], safe_tocken[0], safe_tocken[2]);
|
|
axes = axes.split("").reverse().join("");
|
|
return RSAUtils.encryptedString(key,axes);
|
|
}
|
|
var axesMax = function(){
|
|
var client_tocken = getCookie(CLIENTTOCKEN);
|
|
if(client_tocken=="" || client_tocken==''){
|
|
throw new Error("Cannot read Cookie '"+CLIENTTOCKEN+"' values,System need run RSAData() again!");
|
|
return ;
|
|
}
|
|
return client_tocken.length;
|
|
}
|
|
/**
|
|
* decrypt axes use ras key form http back
|
|
*/
|
|
var decryptAxes = function(rsakey){
|
|
RSAUtils.setMaxDigits(1024);
|
|
var safeTocken = getCookie(SAFETOCKEN);
|
|
if(safeTocken=="" || safeTocken ==''){
|
|
throw new Error("Cannot read Cookie '"+SAFETOCKEN+"' values,System need run RSAData() again!");
|
|
return ;
|
|
}
|
|
var safe_tocken = safeTocken.split(",");
|
|
var pubexp = safe_tocken[1];
|
|
var priexp = safe_tocken[0];
|
|
var modulus = safe_tocken[2];
|
|
var key = RSAUtils.getKeyPair(safe_tocken[1], safe_tocken[0], safe_tocken[2]);
|
|
return RSAUtils.decryptedString(key,rsakey);
|
|
}
|
|
var CLIENTTOCKEN = "Client-Tocken";
|
|
/**
|
|
* Get String key as axes
|
|
*/
|
|
var encryptKey = function(axes){
|
|
//1.get client-tocken
|
|
//2. realse this axes get this encryptKey
|
|
var key="";
|
|
var client_tocken = getCookie(CLIENTTOCKEN);
|
|
if(client_tocken=="" || client_tocken==''){
|
|
throw new Error("Cannot read Cookie '"+CLIENTTOCKEN+"' values,System need run RSAData() again!");
|
|
return ;
|
|
}
|
|
var aaxes = axes.split(",");
|
|
for(var i=0;i<aaxes.length;i++){
|
|
key += client_tocken.substring(aaxes[i],aaxes[i]*1+4);
|
|
}
|
|
return key;
|
|
}
|
|
var getCookie = function(name){
|
|
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
|
|
if(arr=document.cookie.match(reg))
|
|
return decodeURIComponent(arr[2]);
|
|
else
|
|
return "";
|
|
}
|
|
/**
|
|
* get a random axes
|
|
*/
|
|
var creatAxes = function(max){
|
|
var axes = "";
|
|
for(var i=0;i<4;i++ ){
|
|
axes += parseInt(Math.random()*(max-4),10)+",";
|
|
}
|
|
axes = axes.substring(0,axes.length-1);
|
|
return axes;
|
|
}
|
|
/**
|
|
* just encdata for Ajax
|
|
*/
|
|
var EncData = function(data){
|
|
if(data=="" || data =="{}" || data==" " || data==null || data=="null"){
|
|
ciphertext="";
|
|
}else{//存在数据
|
|
//获取aeskey
|
|
var axes_max = axesMax();
|
|
var axes = creatAxes(axes_max);
|
|
var reg=new RegExp(",","g");
|
|
var aesaxes = axes.replace(reg,'-');
|
|
var aesKey = encryptKey(axes);
|
|
data = JSON.stringify(data);
|
|
encdata = Encrypt(data,aesKey);
|
|
ciphertext = encdata+","+aesaxes;
|
|
}
|
|
return {'ciphertext':ciphertext};
|
|
}
|
|
/**
|
|
* get data from back http
|
|
*/
|
|
var DescData = function(JR){
|
|
var _data="";
|
|
if(JR){//data is not empty
|
|
var flag = JR.flag;
|
|
if(flag){//成功
|
|
if(JR.key=="" || JR.key==''){
|
|
_data = JR.data;
|
|
}else{//解密数据
|
|
var axes = JR.key;
|
|
var reg=new RegExp("-","g");
|
|
var aesaxes = axes.replace(reg,',');
|
|
var aesKey = encryptKey(aesaxes);
|
|
var outdata=decodeURIComponent(JR.data);
|
|
_data = Decrypt(outdata,aesKey);
|
|
}
|
|
}else{
|
|
_data = JR.data;
|
|
}
|
|
}
|
|
return {'flag':JR.flag,'data':_data};
|
|
}
|
|
/**
|
|
* post data use as AJAX
|
|
*/
|
|
var SubData = function(data,URL){
|
|
var result="";
|
|
var ciphertext = EncData(data);
|
|
$.ajax({
|
|
type: "POST",
|
|
dataType: "json",
|
|
cache : false,
|
|
async:false,
|
|
url: URL,//传入后台的地址/方法
|
|
data: ciphertext,//参数,这里是一个json语句
|
|
success: function (RS) {
|
|
result = DescData(RS);
|
|
},
|
|
error: function (err) {
|
|
throw new Error("Post data was Error!");
|
|
return ;
|
|
},
|
|
fail:function(){
|
|
throw new Error("Post data was fail,website need NetWork!");
|
|
return ;
|
|
}
|
|
});
|
|
return result;
|
|
}
|
|
|
|
var Encrypt = function(data,key){
|
|
var aeskey = CryptoJS.enc.Utf8.parse(key);
|
|
var aesiv = CryptoJS.enc.Utf8.parse(key);
|
|
var srcs = CryptoJS.enc.Utf8.parse(data);
|
|
return CryptoJS.AES.encrypt(srcs, aeskey, { iv: aesiv,mode:CryptoJS.mode.CBC}).toString();
|
|
}
|
|
function Decrypt(word,key){
|
|
var aeskey = CryptoJS.enc.Utf8.parse(key);
|
|
var aesiv = CryptoJS.enc.Utf8.parse(key);
|
|
var decrypt = CryptoJS.AES.decrypt(word, aeskey, { iv: aesiv,mode:CryptoJS.mode.CBC});
|
|
var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
|
|
return decryptedStr.toString();
|
|
} |