atm-request
Version:
基于axios的前端异步请求,提供便捷API以供调用
158 lines (143 loc) • 5.38 kB
JavaScript
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&¶meterObj?.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
}