首页 > 其他分享 >vue2项目使用jsencrypt.js实现分段加密解密

vue2项目使用jsencrypt.js实现分段加密解密

时间:2024-01-23 17:15:40浏览次数:27  
标签:加密 ----- 解密 js content let vue2 encrypt jsencrypt

安装:npm install jsencrypt

安装:npm install js-base64

组件:demo.vue

<template></template>
<script>
import { SM4Encrypt,SM4Decrypt } from '@/assets/des.js'
import testImportJson from '@/assets/data.json'
export default {
  data() {
    return {
      jsonData: testImportJson,
    };
  },
  created() {
    this.setEncryptDecrypt()
  },
  methods: {
     setEncryptDecrypt(){
      // let str = "测试传字符串"
      let str = this.jsonData//测试json数据加密
      let jiami = SM4Encrypt(str);
      console.log('加密:',jiami);
      let jiemi = SM4Decrypt(jiami);
      console.log('解密:',jiemi);
    }
  },
};
</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
}

 

 

标签:加密,-----,解密,js,content,let,vue2,encrypt,jsencrypt
From: https://www.cnblogs.com/yj-ang3141/p/17982897

相关文章

  • 如何在 Ubuntu 20.04 上安装 Node.js 和 npm
    如何在Ubuntu20.04上安装Node.js和npm2020-05-15106752版权 简介: 本文我们主要为大家介绍在Ubuntu20.04上安装Node.js和npm的三种不同的方式。镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站一、概述Node.js是一个跨平台的JavaScript运......
  • jsgrid多个自定义控件按钮?
    我想添加多个自定义控件按钮,这样我就可以向这些按钮添加一个自定义单击事件。我遇到的问题是删除按钮只显示出来。我希望编辑和删除按钮都显示在每一行。我有以下代码:<script>$(document).ready(function(){$("#jsGrid").jsGrid({height:"auto",......
  • Table 变身记:Element-Plus携手SortableJS打造可拖拽式体验
    使用element-plus的el-table组件创建出来的table。结合sortable.js实现行拖动排序。安装包npminstall-Dsortablejs使用官方table示例代码<template><el-table:data="tableData"style="width:100%"><el-table-columnprop="date"label=&quo......
  • Node.js Shell 脚本开发指南(下)
    十四、创建跨平台shell脚本原文:exploringjs.com/nodejs-shell-scripting/ch_creating-shell-scripts.html译者:飞龙协议:CCBY-NC-SA4.014.1所需的知识14.1.1本章的下一步是什么14.2Node.jsESM模块作为Unix上独立的shell脚本14.2.1Unix上的Node.js......
  • OkHTTP发送POST请求传送JSON数据
    导入依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency>......
  • js Attr类型
    <ulid="myList"></ul>假设想给这个元素添加3个列表项。如果分3次给这个元素添加列表项,浏览器就要重新渲染3次页面,以反映新添加的内容。为避免多次渲染,下面的代码示例使用文档片段创建了所有列表项,然后一次性将它们添加到了元素:letfragment=document.createDocumentFra......
  • js DocumentType类型
    DocumentType类型DocumentType类型的节点包含文档的文档类型(doctype)信息,具有以下特征:nodeType等于10;nodeName值为文档类型的名称;nodeValue值为null;parentNode值为Document对象;不支持子节点。DocumentType对象在DOMLevel1中不支持动态创建,只能在解......
  • js Comment类型
    Comment类型DOM中的注释通过Comment类型表示。Comment类型的节点具有以下特征:nodeType等于8;nodeName值为"#comment";nodeValue值为注释的内容;parentNode值为Document或Element对象;不支持子节点。Comment类型与Text类型继承同一个基类(CharacterData......
  • js Comment类型
    Comment类型DOM中的注释通过Comment类型表示。Comment类型的节点具有以下特征:nodeType等于8;nodeName值为"#comment";nodeValue值为注释的内容;parentNode值为Document或Element对象;不支持子节点。Comment类型与Text类型继承同一个基类(CharacterData......
  • js 规范化文本节点
    在将一个文本节点作为另一个文本节点的同胞插入后,两个文本节点的文本之间不会包含空格。2.规范化文本节点DOM文档中的同胞文本节点可能导致困惑,因为一个文本节点足以表示一个文本字符串。同样,DOM文档中也经常会出现两个相邻文本节点。为此,有一个方法可以合并相邻的文本节点。这......