递归替换
res.forEach(item => {
const replace = (item) => {
item.component = String(item.componentLayout)
delete item.componentLayout
if (item.children && item.children.length) {
item.children.forEach(child => {
replace(child)
})
}
}
replace(item)
})
ApiPost Rsa加解密脚本
var encryptor = new JSEncrypt()
// Convert a hex string to a byte array
function hexToBytes(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2) {
bytes.push(parseInt(hex.substr(c, 2), 16))
}
return bytes
}
// Convert a byte array to a hex string
function bytesToHex(bytes) {
for (var hex = [], i = 0; i < bytes.length; i++) {
hex.push((bytes[i] >>> 4).toString(16))
hex.push((bytes[i] & 0xF).toString(16))
}
return hex.join('')
}
var BI_RM = '0123456789abcdefghijklmnopqrstuvwxyz'
function int2char(n) {
return BI_RM.charAt(n)
}
var b64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
var b64pad = '='
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
}
// convert a base64 string to hex
function b64tohex(s) {
var ret = ''
var i
var k = 0 // b64 state, 0-3
var slop = 0
for (i = 0; i < s.length; ++i) {
if (s.charAt(i) == b64pad) {
break
}
var v = b64map.indexOf(s.charAt(i))
if (v < 0) {
continue
}
if (k == 0) {
ret += int2char(v >> 2)
slop = v & 3
k = 1
} else if (k == 1) {
ret += int2char((slop << 2) | (v >> 4))
slop = v & 0xf
k = 2
} else if (k == 2) {
ret += int2char(slop)
ret += int2char(v >> 2)
slop = v & 3
k = 3
} else {
ret += int2char((slop << 2) | (v >> 4))
ret += int2char(v & 0xf)
k = 0
}
}
if (k == 1) {
ret += int2char(slop << 2)
}
return ret
}
// 方法一
JSEncrypt.prototype.encryptLong = function (d) {
var k = this.key
var maxLength = (((k.n.bitLength() + 7) >> 3) - 11)
try {
var lt = ''
var ct = ''
if (d.length > maxLength) {
lt = d.match(/.{1,117}/g)
lt.forEach(function (entry) {
var t1 = k.encrypt(entry)
ct += t1
})
return hexToBytes(ct)
}
var t = k.encrypt(d)
var y = hexToBytes(t)
return y
} catch (ex) {
return false
}
}
JSEncrypt.prototype.decryptLong = function (string) {
var k = this.getKey()
var maxLength = ((k.n.bitLength() + 7) >> 3)
// var maxLength = 128;
try {
var str = bytesToHex(string)
// var b=hex2Bytes(str);
var inputLen = str.length
var ct = ''
if (str.length > maxLength) {
var lt = str.match(/.{1,256}/g)
lt.forEach(function (entry) {
var t1 = k.decrypt(entry)
ct += t1
})
return ct
}
var y = k.decrypt(bytesToHex(string))
return y
} catch (ex) {
return false
}
}
// 方法2
JSEncrypt.prototype.encryptLong2 = function (string) {
var k = this.getKey()
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 % 117) >= 114 || (byteNo % 117) == 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 hexToBytes(ct)
return hex2b64(ct)
}
var t = k.encrypt(string)
// var y = hexToBytes(t)
var y = hex2b64(t)
return y
} catch (ex) {
return false
}
}
function strtohex(code) {
var hexstr = []
for (var i = 0; i < code.length; i++) {
hexstr += code.charCodeAt(i).toString(16)
}
return hexstr
}
JSEncrypt.prototype.decryptLong2 = function (string) {
var k = this.getKey()
// var maxLength = ((k.n.bitLength()+7)>>3);
var MAX_DECRYPT_BLOCK = 128
try {
var ct = ''
var t1
var bufTmp
var hexTmp
// var str = bytesToHex(string)
var str = b64tohex(string)
var buf = hexToBytes(str)
var inputLen = buf.length
// 开始长度
var offSet = 0
// 结束长度
var endOffSet = MAX_DECRYPT_BLOCK
// 分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
bufTmp = buf.slice(offSet, endOffSet)
hexTmp = bytesToHex(bufTmp)
t1 = k.decrypt(hexTmp)
ct += t1
} else {
bufTmp = buf.slice(offSet, inputLen)
hexTmp = bytesToHex(bufTmp)
t1 = k.decrypt(hexTmp)
ct += t1
}
offSet += MAX_DECRYPT_BLOCK
endOffSet += MAX_DECRYPT_BLOCK
}
return ct
} catch (ex) {
return false
}
}
const publicKey = '公钥'
const privateKey = '私钥'
// 加密
function encrypt(txt) {
txt = encodeURIComponent(txt)
const encryptor = new JSEncrypt()
encryptor.setPublicKey(publicKey) // 设置公钥
let s = encryptor.encryptLong2(txt)
console.log('加密前:' + txt + '\n加密后:' + s)
return s
}
// 解密
function decrypt(txt) {
const decryptor = new JSEncrypt()
decryptor.setPrivateKey(privateKey)
let s = decryptor.decryptLong2(txt)
s = decodeURIComponent(s)
console.log('解密前:' + txt + '\n解密后:' + s)
return s
}
//ApiPost发送脚本
var text = JSON.parse(request.request_bodys)
for (var key in text) {
apt.removeRequestBody(key);
}
console.log(request.request_bodys)
text = encrypt(request.request_bodys)
console.log(text)
apt.setRequestBody("data", text);
//ApiPost接收脚本
var text = response.json.data
console.log(text)
text = decrypt(text);
console.log(text)
response.raw.responseText=text
ApiPost AES加解密脚本
const aes_key = CryptoJS.enc.Utf8.parse("KEY")
const aes_iv = CryptoJS.enc.Utf8.parse("IV")
function Decrypt(word) {
let decrypt = CryptoJS.AES.decrypt(word, aes_key, { iv: aes_iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
return decrypt.toString(CryptoJS.enc.Utf8)
}
function Encrypt(word) {
let encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(word), aes_key, { iv: aes_iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
return encrypted.ciphertext.toString(CryptoJS.enc.Base64)
}
var text = JSON.parse(request.request_bodys)
for (var key in text) {
apt.removeRequestBody(key)
}
//ApiPost发送脚本
console.log(request.request_bodys)
text = Encrypt(request.request_bodys)
console.log("加密值:" + text)
apt.setRequestBody("data", text)
//ApiPost接收脚本
var text = response.json.data ?? response.json.message
console.log(text)
text = Decrypt(text)
console.log("解密值:" + text)
response.raw.responseText = text ?? response.json.data