crypto.js 前端加解密

453 阅读1分钟

安装依赖

npm install crypto-js

封装 encryption.js 方法

import CryptoJS from "crypto-js";

//加密
const crypto = (data) => {

    const word = JSON.stringify(data);
    const counter = useCounterStore();
    //密钥
    const SECRET_KEY = CryptoJS.enc.Utf8.parse('gong si jia mi jie mi mi yao');
    let encrypted;
    let srcs = CryptoJS.enc.Utf8.parse(word);
    encrypted = CryptoJS.AES.encrypt(srcs, SECRET_KEY, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

//解密
const decrypt = (word) => {
    const counter = useCounterStore();
    //密钥
    const SECRET_KEY = CryptoJS.enc.Utf8.parse('gong si jia mi jie mi mi yao');
    let base64 = CryptoJS.enc.Base64.parse(word.replace(/\s/g, ''))
    let src = CryptoJS.enc.Base64.stringify(base64)
    let decrypt = CryptoJS.AES.decrypt(src, SECRET_KEY, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    })

    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
    return JSON.parse(decryptedStr.toString());
}





export {
    crypto, decrypt
} 

使用页面

import { crypto, decrypt } from './encryption'
//请求拦截中加密
instance.interceptors.request.use(
    config => {
        // localStorage.token && (config.headers.Authorization = localStorage.token)

        config.headers["Content-Type"] = 'text/plain'
        config.data = crypto(config.data)
        return config
    },
    error => {
        return Promise.error(error)
    }
)

//响应拦截中解密
instance.interceptors.response.use(response => {
    response.data = decrypt(response.data)
    return Promise.resolve(response)
}, error => {
    return Promise.reject(error)
})

单独页面使用

        import { crypto, decrypt } from '../utils/encryption'

        getInformation() {
            let body = crypto({ authCode: this.AllInfo.authCode, factoryCode: this.AllInfo.nameplateNo });
            axios({
                url: 'XXXXXXXX',
                method: "POST",
                data: body,
                headers: {
                    "Content-Type": "text/plain"
                },
            }).then(res => {
                let data = decrypt(res.data)
                if (data.rspCode == 1) {
               
                }
            })
        },