Files
likedream/internal/application/smartedu/cryptoutil/encdata.js
T
2025-12-09 13:59:12 +08:00

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();
}