144 lines
3.0 KiB
JavaScript
144 lines
3.0 KiB
JavaScript
/**
|
|
* date:2019-10-17
|
|
* author: lien
|
|
* desc: import StringEncrypt from '文件路径'; StringEncrypt.toEncrypt(this.data.dd,'xmfish')
|
|
*/
|
|
import md5 from '../lib/md5'
|
|
import Config from '../config'
|
|
|
|
/**
|
|
* utf-8加密
|
|
*/
|
|
function encodeUtf8(text) {
|
|
const code = encodeURIComponent(text);
|
|
const bytes = [];
|
|
for (var i = 0; i < code.length; i++) {
|
|
const c = code.charAt(i);
|
|
if (c === '%') {
|
|
const hex = code.charAt(i + 1) + code.charAt(i + 2);
|
|
const hexVal = parseInt(hex, 16);
|
|
bytes.push(hexVal);
|
|
i += 2;
|
|
} else bytes.push(c.charCodeAt(0));
|
|
}
|
|
return bytes;
|
|
}
|
|
|
|
/**
|
|
* utf-8解密
|
|
*/
|
|
function decodeUtf8(bytes) {
|
|
var encoded = "";
|
|
for (var i = 0; i < bytes.length; i++) {
|
|
encoded += '%' + bytes[i].toString(16);
|
|
}
|
|
return decodeURIComponent(encoded);
|
|
}
|
|
|
|
|
|
/**
|
|
* 生成从minNum到maxNum的随机数
|
|
*/
|
|
function randomNum(minNum, maxNum) {
|
|
switch (arguments.length) {
|
|
case 1:
|
|
return parseInt(Math.random() * minNum + 1, 10);
|
|
break;
|
|
case 2:
|
|
return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
|
|
break;
|
|
default:
|
|
return 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 随机加密串
|
|
*/
|
|
function randomString(len) {
|
|
len = len || 32;
|
|
let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
|
|
let maxPos = $chars.length;
|
|
let pwd = '';
|
|
let newLen = randomNum(10, len)
|
|
|
|
for (let i = 0; i < newLen; i++) {
|
|
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
|
|
}
|
|
return pwd;
|
|
}
|
|
|
|
/**
|
|
* 获取数据
|
|
*/
|
|
let getData = (DATA) => {
|
|
return DATA
|
|
}
|
|
|
|
/**
|
|
* 删除空值
|
|
*/
|
|
let delEmptyValue = (DATA) => {
|
|
let data = getData(DATA)
|
|
let newData = {}
|
|
for (let i in data) {
|
|
if (data[i] !== '' && Object.prototype.toString.call(data[i]) != "[object Array]" && Object.prototype.toString.call(data[i]) != "[object Object]") {
|
|
newData[i] = data[i]
|
|
}
|
|
}
|
|
return newData
|
|
}
|
|
|
|
/**
|
|
* 按ascii码从小到大排序
|
|
*/
|
|
let sortByAscii = (DATA) => {
|
|
let obj = {
|
|
...delEmptyValue(DATA)
|
|
}
|
|
let arr = new Array();
|
|
let num = 0;
|
|
for (let i in obj) {
|
|
arr[num] = i;
|
|
num++;
|
|
}
|
|
let sortArr = arr.sort();
|
|
//let sortObj = {}; //完成排序值
|
|
let str = ''; //自定义排序字符串
|
|
for (let i in sortArr) {
|
|
str += sortArr[i] + '=' + obj[sortArr[i]] + '&';
|
|
//sortObj[sortArr[i]] = obj[sortArr[i]];
|
|
}
|
|
//去除两侧字符串
|
|
let char = '&'
|
|
str = str.replace(new RegExp('^\\' + char + '+|\\' + char + '+$', 'g'), '');
|
|
|
|
return str
|
|
//return sortObj
|
|
}
|
|
|
|
/**
|
|
* 拼接字符串
|
|
*/
|
|
let combineUrl = (DATA) => {
|
|
let data = sortByAscii(DATA)
|
|
let str = data + '&key=' + Config.key
|
|
// console.log("发送的字符串:"+str)
|
|
return str
|
|
}
|
|
|
|
/**
|
|
* 加密字符串
|
|
*/
|
|
let toEncrypt = (DATA) => {
|
|
// let secretKey = randomString()
|
|
let data = combineUrl(DATA)
|
|
//console.log(data)//加密原始数据
|
|
return md5.hex_md5(data);
|
|
}
|
|
|
|
module.exports = {
|
|
toEncrypt,
|
|
randomString
|
|
} |