前端vue项目中接口前后的加密解密

前端vue项目中接口前后的加密解密

项目需求,对于敏感的数据进项加密!
提到加密首先想到的是crypto-js
本片文章是实际项目中所遇到的,主要采用的是crypto-js AES****RSA 以及qs(不作详细介绍,用兴趣的可以自行百度)

crypto-js jsencrypt.js实际使用例子:
在src文件下创建tools文件,在tools文件下创建crytoJs.js 和jsencrypt.js
目录 src/tools/crytoJs.js
在这里插入图片描述
目录 src/tools/jsencrypt.js
在这里插入图片描述

我把代码贴在这里,在拿代码之前,请先查阅下crytoJs.js和jsencrypt.js的安装方法并自行安装
源码:

//crypto-js
import cryptoJs from 'crypto-js';
var keyOne = randomStr(16);

function randomStr(len) {
  var str = '';
  var dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  for (var i = 0; i < len; i++) {
    var index = Math.floor(Math.random() * dict.length);
    str += dict[index];
  }
  return str;
}

export default {
  keyOne,
  // 加密函数   aes
  jiami(word) {
    // console.log("要加密数据:"+word);
    var key = cryptoJs.enc.Utf8.parse(keyOne);
    var srcs = cryptoJs.enc.Utf8.parse(word);
    var encrypted = cryptoJs.AES.encrypt(srcs, key, { mode: cryptoJs.mode.ECB, padding: cryptoJs.pad.Pkcs7 });
    return encrypted.toString();
  },
  // 解密函数
  jiemi(resutKey,word) {
    // console.log('传入的密文:', word);
    var key = cryptoJs.enc.Utf8.parse(resutKey);
    var decrypt = cryptoJs.AES.decrypt(word, key, { mode: cryptoJs.mode.ECB, padding: cryptoJs.pad.Pkcs7 });
    // console.log("解密结果:"+cryptoJs.enc.Utf8.stringify(decrypt).toString());
    return cryptoJs.enc.Utf8.stringify(decrypt).toString();
  }
}
//jsencrypt
import JSEncrypt from "jsencrypt"

//公钥
var PUBLIC_KEY = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCaNwwk82wprAv3Kg2hKY5rsTVxEoMEkJfsWRDgSuHp54AxihUuEsjaFKSl5ti1WAFV0eyrAEl9HN/826W69IstYMvMp1NFF9bn0Uo8ECIKGKQ+1Rvzw9Dbas5Y6EOJMR+IZoCkR7WT6Dz6H4a4+FLI/6CJEm802IGo0vHQnPXoSQIDAQAB'//私钥
var PRIVATE_KEY = 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAINkuJE9BZyx9Ml8dwsRe4hgGrGCxDbc4GwctKAJPPocZWvYxdMfiNwJSUlcU2Dm/vTCKuSs0qhXKQWZHenytzwL39/dbJR5uDR970bgJkMkhqL2X364ZS2AljpOXvNI6EDPHci1/OjIXOv2JXWSH5SjRsk/2S3lriLfP1ld+lDLAgMBAAECgYATp15AQ1tyi9/sv5Ri8HOE+7MieEf3WOSs50JRafBYDSVSk3NL2Dy1hSIUOh4ysXrTi7O0zvEXwyncr4Gc+/RSbO0zjvK1tfh8vYEJ5qVwi8lF2FCVOsps+oSRrOO3fxAFvELJEpe16lvY/ttNarpBppr7y68hHKIjzkpfxdHwqQJBAMlOySe8URhNNHFm57o6sELAkX0EJGGCP+ueMO1bAq57t+K8HSFbrSKq5+kcLpUZLltArZ9afgz1XDLiOE6H3WUCQQCnF03pagzjVQuk3TT7RDOBi/J1+hakFvrtiOoiVJjqqP6+kCve+7uAdlx0wUx4vNnyJJlgcCV/lim21LtQN+pvAkEAh1ZsbkZwzsG47DSevdkO/xGvvji2rMeAacukYS66ksuiSNDnVLHpqFD2MQY9Wwfe3oKRN30DGXsrTRpBeKpm8QJAFYlEaoRXuulYQdydGpG0zcq66ofcaTPpDbqq6tfaicxUYT112hy6ExmuWwIbGCjHMpWTC0IJI0O4hq8uoW1DkwJBALN5oGYsE43OYVvgThturdhhLjUjNSEVCHo4I3cSh97Y+hNNhnHtol3Jhk2+w6rZ/w/gtBGkrwSPKLLC27Q2pT0=';
//使用公钥加密
JSEncrypt = new JSEncrypt();

function jiami(text) {
    // console.log("公钥加密数据:" + text);
    JSEncrypt.setPublicKey('-----BEGIN PUBLIC KEY-----' + PUBLIC_KEY + '-----END PUBLIC KEY-----');
    return JSEncrypt.encrypt(JSON.stringify(text));
}

function jiemi(text) {
    // console.log("要解密数据:" + text);
    JSEncrypt.setPrivateKey('-----BEGIN RSA PRIVATE KEY-----' + PRIVATE_KEY + '-----END RSA PRIVATE KEY-----');
    return JSEncrypt.decrypt(text);
}

export default {
    jiami, jiemi
}

这里采用的utf8 ,有的地方用的Hex,相要搞清楚可以参考这篇文章:
https://www.jianshu.com/p/a47477e8126a

组件中使用:
引入:

import qs from "qs";
import crytoJs from "../tool/crytoJs";
import jsencrypt from "../tool/jsencrypt";

请求:

此处为敏感数据请谅解:
在这里插入图片描述
具体数据对照上图替换就行了
注:qs方法在这里主要是 路径和对象之间的转换,不需要的自行删除

关于加解密又两篇文章写的不错,我把作者地址放在下边:
crypto
https://www.jianshu.com/p/a47477e8126a
jsencrypt
https://www.jianshu.com/p/5008a407b558

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值