项目上线后,为了安全,会对请求加密,防止看到请求参数。现在直接看代码吧。这里以vue为例。
在main.js中的请求拦截器中
然后主要看加密算法
var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /";
var b64pad = "=";
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
function hex2b64(h) {
var i;
var c;
var ret = "";
for (i = 0; i 3 <= h.length; i = 3) {
c = parseInt(h.substring(i, i 3), 16);
ret = b64map.charAt(c >> 6) b64map.charAt(c & 63);
}
if (i 1 == h.length) {
c = parseInt(h.substring(i, i 1), 16);
ret = b64map.charAt(c << 2);
}
else if (i 2 == h.length) {
c = parseInt(h.substring(i, i 2), 16);
ret = b64map.charAt(c >> 2) b64map.charAt((c & 3) << 4);
}
while ((ret.length & 3) > 0) {
ret = b64pad;
}
return ret;
}
//长字符串加密
JSEncrypt.prototype.encryptLong = function (string) {
var k = this.getKey();
//var MAX_ENCRYPT_BLOCK = (((k.n.bitLength() 7) >> 3) - 11);
var MAX_ENCRYPT_BLOCK = 117;
try {
var lt = "";
var ct = "";
//RSA每次加密117bytes,需要辅助方法判断字符串截取位置
//1.获取字符串截取点
var bytes = new Array();
bytes.push(0);
var byteNo = 0;
var len, c;
len = string.length;
var temp = 0;
for (var i = 0; i < len; i ) {
c = string.charCodeAt(i);
if (c >= 0x010000 && c <= 0x10FFFF) {
byteNo = 4;
} else if (c >= 0x000800 && c <= 0x00FFFF) {
byteNo = 3;
} else if (c >= 0x000080 && c <= 0x0007FF) {
byteNo = 2;
} else {
byteNo = 1;
}
if ((byteNo % MAX_ENCRYPT_BLOCK) >= 114 || (byteNo % MAX_ENCRYPT_BLOCK) == 0) {
if (byteNo - temp >= 114) {
bytes.push(i);
temp = byteNo;
}
}
}
//2.截取字符串并分段加密
if (bytes.length > 1) {
for (var i = 0; i < bytes.length - 1; i ) {
var str;
if (i == 0) {
str = string.substring(0, bytes[i 1] 1);
} else {
str = string.substring(bytes[i] 1, bytes[i 1] 1);
}
var t1 = k.encrypt(str);
ct = t1;
}
;
if (bytes[bytes.length - 1] != string.length - 1) {
var lastStr = string.substring(bytes[bytes.length - 1] 1);
ct = k.encrypt(lastStr);
}
return hex2b64(ct);
}
var t = k.encrypt(string);
var y = hex2b64(t);
return y;
} catch (ex) {
return false;
}
};
下面请看network 加密后的参数
因为私钥解密是java 获取到加密的数据后去解密的,这里就暂时先不写了!!!