UNPKG

atm-request

Version:

基于axios的前端异步请求,提供便捷API以供调用

158 lines (143 loc) 5.38 kB
import CryptoJS from "crypto-js" import JSEncrypt from 'jsencrypt'; import qs from "qs"; import atmConfig from '@/atmConfig'; const encrptMethods={ cryptoData (parameterObj,isJson) { // 不做任何处理0 if (atmConfig.cryptedConfig.reqDataLevel == 0) { return parameterObj } // 只加密1 if (atmConfig.cryptedConfig.reqDataLevel == 1) { return this.encryptedParam(parameterObj,isJson) } // 加密 验签 时间戳(混合)2 // if (atmConfig.cryptedConfig.reqDataLevel == 2) { // return this.mixParam(parameterObj) // } }, // 加密 encryptedParam (parameterObj,isJson) { let ivKey = this.getRandomKey() ivKey = ivKey.substr(0, 16) let pubKey = '' if(window.$stores?.commonStore){ pubKey = window.$stores.commonStore.connectionPublicKey }else if (atmConfig.cryptedConfig.publicKey) { pubKey=atmConfig.cryptedConfig.publicKey }else{ console.error('公钥不存在') return } let encryptor = new JSEncrypt() let $publicKey = '-----BEGIN PUBLIC KEY-----\n' + pubKey + '\n' + '-----END PUBLIC KEY-----'; encryptor.setPublicKey($publicKey) let encryptedPass = encryptor.encrypt(ivKey) if (typeof parameterObj === 'string') { let cryptoData= CryptoJS.AES.encrypt(parameterObj, CryptoJS.enc.Utf8.parse(ivKey), { mode: CryptoJS.mode.ECB }).toString(); let result= { ivKey: encryptedPass, cryptoData: cryptoData } if (isJson==true){ //说明此时参数为空 return result }else{ //如果此时确实是文本参数 return qs.stringify(result) } } let cryptoData= CryptoJS.AES.encrypt(isJson?JSON.stringify(parameterObj):qs.stringify(parameterObj,{allowDots: true, skipNulls: true}), CryptoJS.enc.Utf8.parse(ivKey), { mode: CryptoJS.mode.ECB }).toString(); let result= { ivKey: encryptedPass, cryptoData: cryptoData } return result }, // 加密 加签 时间戳 // mixParam (parameterObj) { // parameterObj = this.signParam(parameterObj) // const sign = JSON.stringify(parameterObj) // const signTime = Date.now() // parameterObj.signText = CryptoJS.md5Sign( signTime + sign) // parameterObj.sign = sign // const newParameterObj = {} // const ivKey = this.getRandomKey() // for (const obj in parameterObj) { // let value = '' // if (Array.isArray(parameterObj[obj])) { // if (parameterObj[obj].length === 0) { // value = '' // } else { // value = JSON.stringify(parameterObj[obj]) // } // } else { // value = parameterObj[obj] // } // if (!value) { // value = '' // } else { // let k1 = btoa(encodeURIComponent(ivKey.substr(0, 16))); // let iv1 = btoa(encodeURIComponent(ivKey.substr(0, 16))); // value= CryptoJS.sm4Encrypt(value, k1, iv1); // } // newParameterObj[obj] = value // } // let k1 = btoa(encodeURIComponent(ivKey.substr(0, 16))); // let iv1 = btoa(encodeURIComponent(ivKey.substr(0, 16))); // newParameterObj.signTime = CryptoJS.sm4Encrypt(signTime, k1, iv1); // newParameterObj.ivKey = CryptoJS.sm2Encrypt(encodeURIComponent(ivKey), atmConfig.cryptedConfig.publicKey) // return newParameterObj // }, decryptedParam (parameterObj){ if (atmConfig.cryptedConfig.reqDataLevel == 1&&parameterObj?.ivKey) { if (typeof parameterObj === 'string') { return } const encrypt_data=parameterObj.data let key=parameterObj.ivKey.substr(0, 16) key = CryptoJS.enc.Utf8.parse(key) let bytes = CryptoJS.enc.Base64.parse(encrypt_data); let aesCipher = CryptoJS.lib.CipherParams.create({ ciphertext: bytes }); let data=CryptoJS.AES.decrypt(aesCipher,key,{ mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) //处理解密后的字节 data=data.toString(CryptoJS.enc.Utf8) parameterObj=JSON.parse(data) } return parameterObj }, getRandomKey () { const random = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] let key = '' for (let i = 0; i < 16; i++) { const index = Math.floor(Math.random() * 62) key += random[index] } return key }, // 验签前处理参数 signParam (parameterObj) { const newParameterObj = {} for (const item in parameterObj) { if (parameterObj[item]) { newParameterObj[item] = parameterObj[item] } } return newParameterObj }, } export default { encrptMethods }