【Koka】前端解密后端传过来的gzip加密数据

gengboxb 1.4K 0

前端采用poka.js进行解密

poko.js可至Github下载 https://github.com/nodeca/pako 或者 npm install pako

以vue-cli   npm 为例子

// npm 安装后导入
import pako from 'pako'
// 加密:btoa(),解密:atob()
let strData = atob(res.data.data.result_List);
// 字符串转数组 在循环返回一个 Unicode表所在位置的新数组
const charData = strData.split('').map(x => x.charCodeAt(0));
// Uint8Array 数组类型表示一个8位无符号整型数组,创建时内容被初始化为0。创建完后,可以以对象的方式或使用数组下标索引的方式引用数组中的元素
const binData = new Uint8Array(charData);
// 调用pako 解析
const data = pako.inflate(binData);
// 处理pako.js解压过长(大)数据时报错的问题
// 数据量过大会报错RangeError: Maximum call stack size exceeded
// 说明 String.fromCharCode.apply 不能接受过长的数组,那么我们可以想到将数组进行拆分->解压->拼接。
const array = new Uint16Array(data);
let dataRes = '';
const chunk = 8 * 1024;
let i;
for (i = 0; i < array.length / chunk; i++) {
  dataRes += String.fromCharCode.apply(null, array.slice(i * chunk, (i + 1) * chunk));
}
// 批量拼接数据
dataRes += String.fromCharCode.apply(null, array.slice(i * chunk));
strData = dataRes;
// 赋值decodeURIComponent(escape())解决中文乱码问题
this.resList = decodeURIComponent(escape(strData));

 

发表评论 取消回复
表情 图片 链接 代码

分享