【react】AES加密

近期pc端需要跳转到另一个项目中 :modal里面放ifram展示 url 跳转的内容

  另外一个项目是.net做的页面 ,后台让做一个入参aes加密 于是

1>下载

npm install crypto-js --save

2>>引用

import * as CryptoJS from 'crypto-js'; // aes加密

3>>>使用 写一个加密 解密的方法

 /*AES加密*/
    Encrypt(data, iv) {
        let encrypted = CryptoJS.AES.encrypt(data, CryptoJS.enc.Latin1.parse(iv), {
            iv: CryptoJS.enc.Latin1.parse(iv),
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        return encrypted.toString();
    }


  /*AES解密*/
        Decrypt(data) {
            let data2 = data //.replace(/
/gm, "");
            let AuthTokenIv = 100869992099929 //偏移量 找后台拿
            let AuthTokenKey = 123 //解密密码 找后台拿
            let decrypted = CryptoJS.AES.decrypt(data2, CryptoJS.enc.Latin1.parse(AuthTokenKey), {
                iv: CryptoJS.enc.Latin1.parse(AuthTokenIv),
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            });
            return decrypted.toString(CryptoJS.enc.Utf8);
        }
  isFillIn = (record) => {
        let that = this
        // 开发测试地址:http://******.e24health.com
        // 宝*人**院线上地址:https://barmyy-m***e.e24health.com
        let url = "https://barmyy-*anag*.e24health.com/Survey/******ecords"
        let obj = { "RefUserId": record.patID, "RefRecordId": record.admID, "QuestId": null }
        let newString = JSON.stringify(obj)
        const option = {
            method: 'POST',
            mode: 'cors',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                'params': this.Encrypt(newString, "10086******5")//偏移量
            })
        };
        fetch(url, option)
            .then(function (response) {
                if (response.ok) {
                    return response.text();
                } else {
                    console.log('网络错误,请稍后再试')
                    return;
                }
            }).then(function (data) {
                let resData = JSON.parse(data)//json字符串转对象
                //判断是否已经答题
                if (resData.code == 10) {
                    that.setState({
                        questionFlag: 0
                    })
                    return
                }
                if (resData.code != 10 && resData.data[0] && resData.data[0].allHasAnswerSubPercent && resData.data[0].allHasAnswerSubPercent != "0") {
                    that.setState({
                        questionFlag: 1
                    })
                } else {
                    that.setState({
                        questionFlag: 0
                    })
                }
            }).catch(function (e) {
                console.log("发送失败: ", e);
                that.setState({
                    questionFlag: 0
                })
            })
    }

参数说明:

AuthTokenKey---密钥 ,

iv ---密钥偏移量,(可接口返回,可直接前后端统一)

参数解释:

解密算法是 AES-128-CBC算法,数据采用 PKCS#7 填充 ;

所以key 长度为 16位

过程中:

遇到几个问题 

请求一直不通 出现警告 

后面打开控制台

还是跨域的问题 后台进行了接口构建  给了几个可以访问到的域名 端口

 于是对应的在本地的项目进行域名和端口的配置,保证上下域一致,从而访问到

 

 ok

原文地址:https://www.cnblogs.com/522040-m/p/13949401.html