VUE---公钥私钥加密解密
最近在开发一些项目,前后端数据分离开发项目,涉及到数据的安全性,需要考虑:
1、前端提交数据,进行加密,后端解密。
2、前端渲染数据,进行解密,后端加密。
第一步:生成加密/解密公钥和私钥。
先生成解密用的私钥:
openssl genrsa -out crypt.pem 2048
然后生成加密用的公钥:
openssl rsa -in crypt.pem -outform PEM -pubout -out crypt-pub.pem
然后就生成了两个文件:

在线生成的方式方法:
http://web.chacuo.net/netrsakeypair https://www.myssl.cn/tools/merge-pem-cert.html
具体实现代码,参考:
https://www.cnblogs.com/JQstronger/p/rsa_vue.html https://blog.csdn.net/weixin_34256074/article/details/91373035
以上这种方式,使用证书进行加密和解密,安全性极高,但是加密和解密的过程相对会比较慢,故可以考虑安全性略低的一种加密方式:AES
AES 加密的模式有两种:EBC,CBC:
1、EBC: 是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
2、CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。(不容易主动攻击,安全性好于ECB,是SSL、IPSec的标准)。
使用方法:
第一步:安装:crypto
npm install crypto-js --save-dev
第二步:utils / crypto.js
import CryptoJS from 'crypto-js' // 需要和后端一致 const KEY = CryptoJS.enc.Utf8.parse('1234567890123456'); const IV = CryptoJS.enc.Utf8.parse('1234567890123456'); export default { /** * 加密 * @param {*} word * @param {*} keyStr * @param {*} ivStr */ encrypt (word, keyStr, ivStr) { let key = KEY; let iv = IV; if (keyStr) { key = CryptoJS.enc.Utf8.parse(keyStr); iv = CryptoJS.enc.Utf8.parse(ivStr); } let srcs = CryptoJS.enc.Utf8.parse(word); var encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding }); return CryptoJS.enc.Base64.stringify(encrypted.ciphertext); }, /** * 解密 * @param {*} word * @param {*} keyStr * @param {*} ivStr */ decrypt (word, keyStr, ivStr) { let key = KEY; let iv = IV; if (keyStr) { key = CryptoJS.enc.Utf8.parse(keyStr); iv = CryptoJS.enc.Utf8.parse(ivStr); } let base64 = CryptoJS.enc.Base64.parse(word); let src = CryptoJS.enc.Base64.stringify(base64); let decrypt = CryptoJS.AES.decrypt(src, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding }); let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8); return decryptedStr.toString(); } }
如何使用:
// 加密 handleEncrypt(){ this.encryptStr = crypto.encrypt(this.str); }, // 解密 handleDecrypt(){ this.decryptStr = crypto.decrypt(this.encryptStr); console.log(this.decryptStr); }
打完收工!

浙公网安备 33010602011771号