vue2项目使用jsencrypt.js实现分段加密解密
安装:npm install jsencrypt
安装:npm install js-base64
组件:demo.vue
<template></template> <script> // 加密 解密 import { rsaEncryptSet, rsaDecryptSet } from "@/assets/des"; import testImportJson from '@/assets/data.json' export default { data() { return { jsonData: testImportJson }; }, created() { let data = "测试传字符串" // let data = this.jsonData //测试json数据加密 let jiami = rsaEncryptSet(data); console.log('加密:',jiami); let jiemi = rsaDecryptSet(jiami); console.log('解密:',jiemi); }, methods: {} }; </script>
des.js
import { JSEncrypt } from 'jsencrypt'
const Base64 = require("js-base64").Base64
// 公钥
var pubKey = "-----BEGIN PUBLIC KEY-----" + "您的公钥" + "-----END PUBLIC KEY-----";
// 私钥
var priKey = "-----BEGIN RSA PRIVATE KEY-----" + "您的私钥" + "-----END RSA PRIVATE KEY-----"
// 分段拼接符
const $splitStr = "[montage@]"
// 实例化一个RSA对象
var encrypt = new JSEncrypt();
// 设置公钥和私钥
encrypt.setPublicKey(pubKey);
encrypt.setPrivateKey(priKey);
/**
* [rsaEncryptSet 文本加密]
* @param {[type]} content 待加密文本
* JSON转换 ——> Base64转换 ——> encrypt加密(分段加密)
*/
export const rsaEncryptSet = (content) => {
if (content == undefined) return
let jsonContent = JSON.stringify(content); // JSON转换
let newText = Base64.encode(jsonContent); // Base64转换
let textEncrypt = ''; //加密文本
let maxLength = 100; //分段长度
if(newText.length>maxLength){
let newArr = newText.match(/.{1,100}/g); //文本分段 数组
for (let i = 0; i < newArr.length; i++) {
let encryptStr = encrypt.encrypt(newArr[i]); //分段 加密
textEncrypt = textEncrypt ? textEncrypt + $splitStr + encryptStr : encryptStr //拼接 加密字符串
}
}else{
textEncrypt = encrypt.encrypt(newText);// 加密
}
// console.log('加密:',textEncrypt)
return textEncrypt
}
/**
* [rsaDecryptSet 文本解密]
* @param {[type]} content 待解密密文
* encrypt解密(分段解密) ——> Base64转换 ——> JSON转换
*/
export const rsaDecryptSet = (content) => {
if (content == undefined) return
let contentDecrypt = ''
if(content.includes($splitStr)){
let newArr = content.split($splitStr) //文本分段 数组
for (let i = 0; i < newArr.length; i++) {
let decryptStr = encrypt.decrypt(newArr[i]); //分段 解密
contentDecrypt += decryptStr //拼接 解密字符串
}
}else{
contentDecrypt = encrypt.decrypt(content);//解密
}
let Base64Decrypt = Base64.decode(contentDecrypt); //Base64转换
let decryptData = null //解密数据
if (typeof(Base64Decrypt) === 'string') {
try{
decryptData = JSON.parse(Base64Decrypt) // JSON转换
}catch(error){
decryptData = Base64Decrypt
}
}
// console.log('解密:',decryptData)
return decryptData
}
浙公网安备 33010602011771号