js代码整理
js代码整理

js代码整理

递归替换

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