• 【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

  • 相关阅读:
    SharePoint 2010 编程链接两个web part
    SharePoint 2010 Value does not fall within the expected range
    SharePoint 自定义开发chart web part
    跨站点显示SharePoint 列表或者文档库 cross site
    SharePoint Javascript 改变当前站点语言
    【转】 C++11中值得关注的几大变化
    XPM
    Thinking in C++ 第一章 对象导言
    Thinking in C++ 第4,5,6,7章
    Internal DSL
  • 原文地址:https://www.cnblogs.com/522040-m/p/13949401.html
Copyright © 2020-2023  润新知