首页 > 其他分享 >前端开发之jsencrypt加密解密的使用方法和使用示

前端开发之jsencrypt加密解密的使用方法和使用示

时间:2024-11-05 14:41:29浏览次数:3  
标签:加密 MAX 解密 前端开发 let offSet const jsencrypt BLOCK

1、安装组件
npm install jsencrypt --dev
2、创建加密解密的方法文件

3、文件内容

import JSEncrypt from 'jsencrypt'
//去密钥生成网址去生成公钥和密钥 http://tools.jb51.net/password/rsa_encode
const publicKey = '生成的公钥'
// 前端不建议存放私钥 不建议解密数据 因为都是透明的意义不大
const privateKey ='生成的密钥'

/**
 * 最长加密长度
 */
const MAX_ENCRYPT_BLOCK = 117
/**
 * 最长解码长度
 */
const MAX_DECRYPT_BLOCK = 128

/**
 * @description RSA加密(支持长字符加密)
 */
export async function encryptedData (data:any) {
  //创建实例
  const encrypt = new JSEncrypt()
  // 设置公钥
  encrypt.setPublicKey(
    `-----BEGIN PUBLIC KEY-----${publicKey}-----END PUBLIC KEY-----`
  )
  let bufTmp = ''
  let hexTmp:any = ''
  let result = ''
  const buffer = JSON.stringify(data)
  let offSet = 0
  const inputLen = buffer.length
  while (inputLen - offSet > 0) {
    if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
      bufTmp = buffer.slice(offSet, offSet + MAX_ENCRYPT_BLOCK)
    } else {
      bufTmp = buffer.slice(offSet, inputLen)
    }
    //对数据进行加密
    hexTmp = encrypt.encrypt(bufTmp.toString())
    result += hexTmp
    offSet += MAX_ENCRYPT_BLOCK
  }
  //js可以使用Buffer.from()  ts中使用Buffer.from(),运行后控制台会报错Buffer undefined所以使用替代方案node方法btoa再次加密
  return btoa(result)
}

/**
 * @description RSA解密(支持长字符解密)
 * @param data
 * @returns {PromiseLike<ArrayBuffer>}
 */
export function decryptedData (data) {
  const decrypt = new JSEncrypt()
  //设置私钥
  decrypt.setPrivateKey(
    `-----BEGIN RSA PRIVATE KEY-----${privateKey}-----END RSA PRIVATE KEY-----`
  )
  let bufTmp = ''
  let hexTmp:any = ''
  let result = ''
  //通过使用atob解码数据  如果使用的Buffer.from()使用Buffer.from()解码数据
  const buffer = atob(data)
  let offSet = 0
  const inputLen = buffer.length
  while (inputLen - offSet > 0) {
    if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
      bufTmp = buffer.slice(offSet, offSet + MAX_DECRYPT_BLOCK)
    } else {
      bufTmp = buffer.slice(offSet, inputLen)
    }
    //对数据解码
    hexTmp = decrypt.decrypt(bufTmp)
    result += hexTmp
    offSet += MAX_DECRYPT_BLOCK
  }
  return JSON.parse(result)
}



// huozhe 
// 加密
export const encrypt = (txt: string) => {
  const encryptor = new JSEncrypt();
  encryptor.setPublicKey(publicKey); // 设置公钥
  return encryptor.encrypt(txt); // 对数据进行加密
};

// 解密
export const decrypt = (txt: string) => {
  const encryptor = new JSEncrypt();
  encryptor.setPrivateKey(privateKey); // 设置私钥
  return encryptor.decrypt(txt); // 对数据进行解密
};




标签:加密,MAX,解密,前端开发,let,offSet,const,jsencrypt,BLOCK
From: https://www.cnblogs.com/baozhengrui/p/18527920

相关文章

  • 简单的C语言数据加解密算法实现与探讨
    在数据安全日益重要的今天,加密技术成为了保护信息不被未授权访问或篡改的重要手段。虽然在实际应用中,我们通常会采用如AES、RSA等复杂的加密算法,但理解加密的基本原理和实现一个简单的加密算法对于学习计算机安全基础至关重要。本文将介绍如何使用C语言实现一个基于简单替换加密(Su......
  • Spring Boot实现api接口加解密
    在SpringBoot应用中实现API接口的加解密,可以确保数据在传输过程中的安全性。通常,我们会使用HTTPS来加密传输层的数据,同时也可以在应用层对数据进行额外的加密和解密。以下是一个基本的实现步骤,包括使用HTTPS和应用层加密。使用HTTPSHTTPS是HTTP的安全版本,通过SSL/TLS协议......
  • 前端开发设计模式: 单例模式
    什么是单例模式?(SingletonPattern) 单例模式,也叫单体模式,是一种创建型设计模式,是全局(或某一作用域范围)唯一实例,大家共享、复用一个实例对象。——最基础、最常见的设计模式1、保证对象实例只创建一次,后续的引用都是同一个实例对象2、保证一个类只有一个实例,并提供一个访问它......
  • Oracle、MySQL、ClickHouse的通用AES256加解密如何实现?
     Oracle、MySQL、ClickHouse的通用AES256加解密如何实现? 前段时间研究了加密算法aes,写了个文档,分享到博客上来。防。1  说明应XXX安全生产需求,对目标库目标表业务字段敏感信息进行加密密文存放,查询时通过解密得到明文进行数据使用,要求使用AES256。目前公司所使用主要......
  • 前端开发 npm ,pnpm
    npmpnpm通过npm安装pnpm安装npminstall-gpnpm安装指定版本[email protected]或者npminstall-gpnpm@X查看当前pnpm版本pnpm-v或pnpm-version卸载npmrm-gpnpm升级版本pnpmadd-gpnpmtoupdate常用命令对比npm命令pnpm......
  • 前端开发者必学:mo.js动画库
    前端开发者必学:mo.js动画库前言在当今的网页设计中,动态效果和交互性是提升用户体验的关键因素。mo.js,一个轻量级的JavaScript动画库,为前端开发者提供了一种简单而强大的方法来创建引人注目的动画效果。本文将向您介绍mo.js的基本概念、特点、使用场景以及如何在Vue环境......
  • 前端开发设计模式——观察者模式
    目录一、定义和特点1.定义2.特点二、实现方式1.使用JavaScript实现观察者模式的基本结构2.实际应用中的实现示例三、使用场景1.事件处理2.数据绑定3.异步通信4.组件通信四、优点1.解耦和灵活性2.实时响应和数据一致性3.提高代码的可复用性五、缺......
  • Python使用AES进行盐值加密和解密
    方法一:抽象类版importbase64fromCrypto.CipherimportAESclassEncryptDate:def__init__(self,key):self.key=key.encode('utf-8')#初始化密钥self.length=AES.block_size#初始化数据块大小self.aes=AES.new(self.key,AE......