美文网首页vue
vue+axios使用RSA传参加密

vue+axios使用RSA传参加密

作者: Dr_喜禾 | 来源:发表于2019-01-31 10:18 被阅读0次

    新手上路----->:

    vue+axios项目,之前使用md5加密,后改使用RSA传参加密,RSA 加密依赖有多种,这里使用jsencrypt 。

    ps:rsa加密公钥私钥由后台生成后,只提供给给前台公钥即可。

    1、npm install --save jsencrypt

    2、引入两个js文件,我在src下新建了一个plugins文件,在里面引入jsencryptKey,js和jssHttp.js

    3、jsencryptKey,js下:

    import Vue from 'vue'

    import JsEncrypt from 'jsencrypt'

    //RSA加密

    export const  $encruption = function (key,obj) {

        let encrypt = new JsEncrypt();

        encrypt.setPublicKey(

            //KEY RSA公钥

            key

        );

        return encrypt.encrypt(obj);

    };

    //RSA解密

    export const $decryption = function (key,obj) {

        let _decryp = new JsEncrypt();

        _decryp.setPrivateKey(

            //KEY RSA私钥

            key

        );

        return _decryp.decrypt(obj)

    };

    4、jssHttp.js下引入jsencryptKey中定义的加密方法$encruption,封装请求,RSA加密有长度限制,需分段加密

    import Vue from 'vue';

    import axios from 'axios';

    import {$encruption,$decryption} from '../plugins/jsencryptKey'

    let publicKey = '*****'; //后台提供的公钥

    /**

    * 封装get方法

    * @param url

    * @param data

    * @returns {Promise}

    */

    export function get(url,params){

        return new Promise((resolve,reject) => {

            axios.get(url,{

                params: params

            })

            .then(response => {

                resolve(response.data);

            })

            .catch(err => {

                reject(err)

            })

        })

    }

    /**

    * 封装post请求

    * @param url

    * @param data

    * @returns {Promise}

    */

    export function post(url,data){

        let paramsData = '';  //加密后的参数

        let paramsString = ''; //把传过来的data数据转成字符串

        let params1 = '';      //把paramsString每三十个字符截取一次赋值给params1

        let params2 = '';      //把params1循环加密赋值给params2

        if(data){

            paramsString = JSON.stringify(data);

        }

        //RSA加密是有长度限制,由于存在参数超长的情况,所以这里进行分段加密处理

        if(paramsString.length > 30){

            params1 = paramsString.match(/.{1,30}/g);

            params1.forEach(function(d){

                let params3 = $encruption(publicKey,d);

                params2 += params3;

            })

            paramsData = params2;

        }else {

            if(data){

                paramsData = "{\"request\":" + $encruption(publicKey,JSON.stringify(data)) + "}"

            } 

        }

        //可以在这打印加密后的数据和解密后的数据,需后台提供私钥

        // console.log($encruption(publicKey,JSON.stringify(data)))

        // console.log($decryption(privateKey,$encruption(publicKey,JSON.stringify(data))))

        return new Promise((resolve,reject) => {

            axios.post(url,paramsData)

            .then(response => {

                resolve(response);

            },err => {

                reject(err)

            })

        })

    }

    5、在main.js中引入

            import JsEncrypt from 'jsencrypt'

            import {post} from './plugins/jssHttp'

            Vue.prototype.$jsEncrypt = JsEncrypt

            Vue.prototype.$post = post;

    6、在组件中可直接使用,传参方式为键值对方式
                let params = { 'name': abc, 'age': 20, 'sex': '女'}

                this.$post('url',params)

                .then(res => {

                   console.log(res)

                })

                .catch(err => {

                    console.log(err)

                })

    以上。

    相关文章

      网友评论

        本文标题:vue+axios使用RSA传参加密

        本文链接:https://www.haomeiwen.com/subject/axcksqtx.html