在项目接口调用处进行请求拦截,统一加上请求头 G-Sign-V1
调用方式:
import { getGSign } from './gateSign.js'
service.interceptors.request.use(
config => {
config.headers['G-Sign-V1'] = getGSign()
return config
},
error => {
return Promise.reject(error)
}
)
加密gateSign.js如下:
const CryptoJS = require('crypto-js')
const encryptKey = 'eNgWuwpQ84MZVTQbmdtHWTEwYXFibzDNXPSMP+B5VsA=' // 秘钥
const encryptIv = 'tFxRc2Ukj13a7Pj93WQI6w==' // 秘钥
export function argEncryptByDES() {
if (!localStorage.getItem('name')) {
return ''
}
var time = parseInt(new Date().getTime() / 1000)
var salt = Math.round(Math.random() * 1000000).toString()
var version = '1.0.36.0'
var username = localStorage.getItem('name')
var appCode = 'shopify'
const token = getGateToken(salt, time, version, username, appCode)
// console.log(token, 'token')
const param = {
time: time,
salt: salt,
token: token,
appCode: appCode,
version: version,
username: username
}
const str = JSON.stringify(param)
const gateKey = encryptKey
const gateIv = encryptIv
const encStr = getAesString(str, gateKey, gateIv)
const sign = getAES(encStr, gateKey, gateIv)
return sign
}
function getAesString(data, key, iv) {
var encrypted = CryptoJS.AES.encrypt(data, CryptoJS.enc.Base64.parse(key), { iv: CryptoJS.enc.Base64.parse(iv) })
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
}
function getAES(data, key, iv) {
const macStr = iv + data + ''
const macHash = CryptoJS.HmacSHA256(macStr, CryptoJS.enc.Base64.parse(key))
const mac = CryptoJS.enc.Hex.stringify(macHash)
const json = {
iv: iv,
value: data,
mac: mac
}
const jsonStr = JSON.stringify(json)
var sendStr = btoa(jsonStr)
return sendStr
}
export function getRandom(num) {
return Math.floor((Math.random() + Math.floor(Math.random() * 9 + 1)) * Math.pow(10, num - 1))
}
export function getGateToken(salt, time, version, username, appCode) {
const str = salt.toString() + time.toString() + salt.toString() + username.toString() + version.toString() + appCode.toString() + ''
return encryptMD5(encryptMD5(str))
}
export function encryptMD5(text) {
const val = CryptoJS.MD5(text).toString().toLowerCase()
return val
}
export function aesDecrypt(ciphertext, key, iv) {
var newKey = CryptoJS.enc.Latin1.parse(atob(key))
var newIv = CryptoJS.enc.Latin1.parse(atob(iv))
const decoded = CryptoJS.AES.decrypt(ciphertext, newKey, {
iv: newIv,
mode: CryptoJS.mode.CBC,
adding: CryptoJS.pad.ZeroPadding
}).toString(CryptoJS.enc.Utf8)
// console.log('decoded', decoded)
return decoded
}